Закрытие формы и вызов другой - PullRequest
15 голосов
/ 01 мая 2010

Я хочу закрыть текущую форму (MainForm), а затем открыть вторую (Форма).

Я пробовал:

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

    Form2 form2 = new Form2();
    form2.ShowDialog();
}

Или добавление this.Close(); после form2.ShowDialog() также не работает.

Есть подсказки?

РЕДАКТИРОВАТЬ: Можно также добавить, что, добавив this.Close() после form2.ShowDialog(), он закрывается только когда я закрываю новую форму. Если я выберу form2.Show(), он сразу закроет обе формы.

Ответы [ 11 ]

34 голосов
/ 01 мая 2010

Изменение

this.Close();

Кому:

this.Hide();

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

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

Ваш код новый код:

private void buttonStartQuiz_Click(object sender, EventArgs e)
    {
        // hide main form
        this.Hide();

        // show other form
        Form2 form2 = new Form2();
        form2.ShowDialog();

        // close application
        this.Close();
    }
6 голосов
/ 01 мая 2010

Вы можете связываться с ApplicationContext, но .NET Framework уже имеет очень хорошую поддержку этого оконного режима с классом WindowsFormsApplicationBase. Его свойство ShutdownStyle доступно, чтобы позволить программе закрываться только после закрытия последнего окна. Сделайте код в Program.cs похожим на это:

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;  // Add reference to Microsoft.VisualBasic!!

namespace WindowsFormsApplication1 {
  class Program : WindowsFormsApplicationBase {
    [STAThread]
    static void Main(string[] args) {
      var app = new Program();
      app.EnableVisualStyles = true;
      app.ShutdownStyle = ShutdownMode.AfterAllFormsClose;
      app.MainForm = new Form1();
      app.Run(args);
    }
  }
}
1 голос
/ 10 декабря 2017

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

private void button_Name_Click(object sender, EventArgs e)
    {
        form_2 Form2 = new Form2();
        Form2.ShowDialog();
        this.Close();
    }
0 голосов
/ 17 марта 2017

Просто замените это. Close (); с этим.Скрыть (); Это будет отлично работать!

0 голосов
/ 29 января 2015

Поместите это в главную форму

private void mainform_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

работал для меня.

0 голосов
/ 15 января 2015
new play().Show();
this.Dispose();
0 голосов
/ 02 мая 2014
this.Visible = false;
Form2 form2 = new Form2();
form2 .ShowDialog();
this.Close();
0 голосов
/ 14 марта 2014

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

btCancel.FindForm().Close();

btcancel - кнопка, расположенная на форме, которую вы хотите закрыть.

0 голосов
/ 11 апреля 2013

Просто включите или отключите саму форму, вместо того, чтобы пытаться закрыть.

Код это как:

this.enabled = false;

в событии клика или где вы хотите.

Надеюсь, это поможет.

0 голосов
/ 09 января 2013
Form2 frm2 = new Form2();
frm2.ShowDialog();

и

this.Close();

не очень хорошая комбинация ..

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

this.Hide();

работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...