Открытие новой формы, закрытие старой C # - PullRequest
5 голосов
/ 10 декабря 2011

Я в некотором роде новичок в C # и занимаюсь самообучением, пытаясь создать программу с различными функциями, чтобы научить себя, как работать с C #. Я обычно смотрю в интернет, если я чего-то не знаю, но это сводит меня с ума.

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

В настоящее время для открытия новой формы я использую этот код, но создается впечатление, что должно быть что-то с 1 строкой кода для чего-то столь же простого, как открытие формы ... Мой вопрос, если есть.

    private void OpenMainForm()
    {
        MainForm frm2 = new MainForm();
        frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
        frm2.Show();

        // Since this.Hide() for some reason doesn't work, i'll have to do this crap
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
    }

    private void frm2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close();
    }

Ответы [ 4 ]

14 голосов
/ 10 декабря 2011

Если вы хотите скрыть свое главное окно, когда вы находитесь во вторичном, вы должны использовать метод ShowDialog().При этом вам даже не понадобится form_closed event.Ваш код должен выглядеть так:

private void OpenMainForm()
{
    MainForm frm2 = new MainForm();
    this.Hide();           //Hide the main form before showing the secondary
    frm2.ShowDialog();     //Show secondary form, code execution stop until frm2 is closed
    this.Show();           //When frm2 is closed, continue with the code (show main form)
}
4 голосов
/ 01 июля 2013

Вы также можете использовать этот код:

public static void ThreadProc()
{
    Form2 f; 
    Application.Run(new Form2());
}

private void button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
    t.Start();
    this.Close();
 }
2 голосов
/ 10 декабря 2011

Это прекрасно работает для меня

Form2 frm = new Form2();
frm.Show();
frm.Activate();
this.Hide();

но если вы хотите закрыть все приложение из Form2 ... вам нужно добавить Application.Exit(); в FormClosing событие Form2

0 голосов
/ 10 декабря 2011

Вы можете скрыть старую форму, как показано ниже.

private void frm2_FormClosed(object sender, FormClosedEventArgs e)
{
    this.Hide();
}
...