Как открыть новую форму из другой формы - PullRequest
45 голосов
/ 19 октября 2010

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

в обработчике событий нажатия кнопки «Больше кнопок» я написал следующий код

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

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

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

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

Может кто-нибудь, пожалуйста, помогите мне решить проблему. Что мне нужно сделать, так это то, что если мы нажмем кнопку «Еще», она должна открыть другую форму и закрыть первую форму.

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

Ответы [ 8 ]

51 голосов
/ 19 октября 2010

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

// 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 в первом дочернем элементе.Основным преимуществом этого подхода является то, что вы можете реплицировать его по мере необходимости и очень легко смоделировать какой-то базовый рабочий процесс.

36 голосов
/ 19 октября 2010

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

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.
    }
13 голосов
/ 16 июля 2013

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

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();

Удачи!

6 голосов
/ 19 октября 2010

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

Для Ex

  1. Создание трех окон из
  2. Форма 1 Форма 2 Форма 3
  3. Добавить одну кнопку в форму 1
  4. Добавить две кнопки в форму 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();
        }
    }

Оставьте форму 3 как есть

3 голосов
/ 01 октября 2012

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

//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;
}
1 голос
/ 14 августа 2017

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

//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
    frm2.Show(this); //this will show Form2
    frm1.Hide();  //this Form will hide
}
0 голосов
/ 28 мая 2018

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

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

0 голосов
/ 05 апреля 2017

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

your name example=form2.

form2 obj=new form2();

obj.show();

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

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

...