Почему моя форма C # закрыта при отображении? - PullRequest
2 голосов
/ 28 ноября 2011

у меня есть 2 формы, это form1.cs и form2.cs

в форме 1, у нее есть кнопка 1, которая вызовет форму 2 для отображения

вот код button1

private void button1_Click(Object sender, EventArgs e )
{
form2 form = new form2();

form2.show();   // to call form2

this.dispose(); //to dispose form1

}

и затем форма2 показала, и она внезапно закрылась кто-нибудь знает как это решить?

Ответы [ 5 ]

3 голосов
/ 28 ноября 2011

Когда вы закрываете основную форму с помощью this.dispose(), вы закрываете программу, вызывая удаление формы 2 также из-за того, что вы отправляете ссылку на форму 2. Вам лучше передать ссылку на вашу форму1 в форму2 и использовать вместо нее this.Hide().

Вы можете попробовать что-то вроде этого:

 public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }



        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.setParent(this);
            form.Show();
            this.Hide();

        }
    }

И в форму2, чтобы вернуться в форму1

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

        public void setParent(Form value)
        {
            parentForm = value;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            parentForm.Show();
            this.Close();
        }
    }
2 голосов
/ 28 ноября 2011
private void button1_Click(Object sender, EventArgs e )
{
form2 form = new form2();

form2.show();   // to call form2

this.hide(); //to hide form1

}
0 голосов
/ 28 ноября 2011

Вы можете использовать this.Hide (), который должен скрыть текущую форму, или использовать поток, чтобы открыть новую форму.

Пример: C # открыть новую форму и закрыть форму...

0 голосов
/ 28 ноября 2011

Show () не ждет закрытия формы2, прежде чем перейти к следующей команде (dispose).В итоге это закроет форму form2, потому что она, вероятно, работает в фоновом потоке.

Используйте ShowDialog для удержания выполнения Dispose до закрытия второй формы.

Также вы можете установить вторую формубегать по нитке переднего плана.Таким образом, вторая форма не будет зависеть от жизни первой.

0 голосов
/ 28 ноября 2011

, если form1 - программа запуска, приложение закроется.Следовательно вместо

this.dispose();

U просто напишите

this.hide();
...