Как открыть новую форму из другой формы

У меня есть форма, которая открывается с помощью метода ShowDialog. В этой форме у меня есть кнопка с именем More. Если мы нажмем "Больше", он должен открыть другую форму и закрыть текущую форму.

на дополнительной кнопке Обработчик события Click Я написал следующий код

MoreActions objUI = new MoreActions (); 
objUI.ShowDialog();
this.Close();

Но то, что происходит, это не закрытие первой формы. Итак, я изменил этот код на

MoreActions objUI = new MoreActions (); 
objUI.Show();
this.Close();

Здесь отображается вторая форма, и в течение нескольких секунд формы закрываются.

Кто-нибудь может помочь мне исправить проблему. Что мне нужно сделать, так это: если мы нажмем на кнопку More, она должна открыть другую форму и закрыть первую форму.

Любая помощь будет мне очень полезной.

Ответ 1

По моему мнению, основная форма должна отвечать за открытие обеих дочерних форм. Вот несколько псевдо, которые объясняют, что я буду делать:

// MainForm
private ChildForm childForm;
private MoreForm moreForm;

ButtonThatOpenTheFirstChildForm_Click()
{
    childForm = CreateTheChildForm();
    childForm.MoreClick += More_Click;
    childForm.Show();
}

More_Click()
{
    childForm.Close();
    moreForm = new MoreForm();
    moreForm.Show();
}

Вам просто нужно создать простое событие MoreClick в первом дочернем элементе. Основное преимущество этого подхода состоит в том, что вы можете его реплицировать по мере необходимости, и вы можете легко смоделировать какой-то базовый рабочий процесс.

Ответ 2

Если бы я понял, вы так пытаетесь?

alt text

в это?
alt text

в Form1, добавьте это событие в свою кнопку:

    // button event in your Form1
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog(); // Shows Form2
    }

то в Form2 добавьте это событие в свою кнопку:

    // button event in your Form2
    private void button1_Click(object sender, EventArgs e)
    {
        Form3 f3 = new Form3(); // Instantiate a Form3 object.
        f3.Show(); // Show Form3 and
        this.Close(); // closes the Form2 instance.
    }

Ответ 3

ok, поэтому я использовал это:

public partial class Form1 : Form
{
    private void Button_Click(object sender, EventArgs e)
    {
        Form2 myForm = new Form2();
        this.Hide();
        myForm.ShowDialog();
        this.Close();
    }
}

Кажется, что это работает нормально, но первая форма просто скрыта, и она все равно может генерировать события. "this.Close()" необходимо для закрытия первой формы, но если вы все еще хотите, чтобы ваша форма запускалась (а не выполнялась как пусковая установка), вы ДОЛЖНЫ заменить ее на

this.Show();

Удачи!

Ответ 4

Я бы использовал значение, которое будет установлено, когда больше кнопок будет закрыто первое диалоговое окно, а затем исходная форма проверит значение, а затем отобразит диалоговое окно.

Для Ex

  • Создайте три окна из
  • Form1 Form2 Form3
  • Добавить одну кнопку в Form1
  • Добавить две кнопки для создания2

Код формы 1

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private bool DrawText = false;

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
        if (f2.ShowMoreActions)
        {
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

    }

Код формы 2

 public partial class Form2 : Form
 {
        public Form2()
        {
            InitializeComponent();
        }

        public bool ShowMoreActions = false;
        private void button1_Click(object sender, EventArgs e)
        {
            ShowMoreActions = true;
            this.Close();
        }


        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

Оставить form3 как есть

Ответ 5

Попробуйте это.

//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
    this.Visible = false;     // this = is the current form
    SignUp s = new SignUp();  //SignUp is the name of  my other form
    s.Visible = true;
}

Ответ 6

вы можете рассмотреть этот пример

//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
    frm2.Show(this); //this will show Form2
    frm1.Hide();  //this Form will hide
}

Ответ 7

Например, у вас есть Button с именем Button1. Сначала щелкните по нему, чтобы открыть EventHandler этого Button2, чтобы вызвать другой Form, вы должны записать следующий код на свою кнопку.

your name example=form2.

form2 obj=new form2();

obj.show();

Чтобы закрыть форму1, напишите следующий код:

form1.visible=false; или form1.Hide();

Ответ 8

Вы можете попробовать добавить bool, чтобы алгоритм знал, когда кнопка была активирована. При щелчке bool проверяет значение true, отображается новая форма и последняя закрывается.

Важно знать, что формы потребляют некоторое количество оперативной памяти (по крайней мере, немного), поэтому рекомендуется закрывать те, которые вы не собираетесь использовать, вместо того, чтобы просто их скрывать. Делает разницу в больших проектах.

Ответ 9

private void Button1_Click(object sender, EventArgs e)
{
    NewForm newForm = new NewForm();    //Create the New Form Object
    this.Hide();    //Hide the Old Form
    newForm.ShowDialog();    //Show the New Form
    this.Close();    //Close the Old Form
}