Закрытие формы, а затем вызов другой

Я хочу закрыть текущую форму, на которой я включен (MainForm), а затем открыть вторую (Form).

Я пробовал:

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

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

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

Любые подсказки?

EDIT: также можно добавить, что добавив this.Close() после form2.ShowDialog(), он закрывается только при закрытии новой формы. Если я выберу form2.Show(), он сразу же закроет обе формы.

Ответы

Ответ 1

Изменить

this.Close();

To:

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

Ответ 2

Вы можете взаимодействовать с ApplicationContext, но платформа .NET уже имеет очень хорошую поддержку этого режима окон с классом 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);
    }
  }
}

Ответ 3

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

private void button_Name_Click(object sender, EventArgs e)
    {
        form_2 Form2 = new Form2();
        Form2.ShowDialog();
        this.Close();
    }

Ответ 4

Form2 frm2 = new Form2();
frm2.ShowDialog();

и

this.Close();

не является хорошей комбинацией.

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

this.Hide();

работает...

Ответ 5

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

Введите код:

this.enabled = false;

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

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

Ответ 6

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

Ответ 7

Сначала вы закрываете форму, сначала нужно загрузить вторую форму.

private void buttonStartQuiz_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
this.Close();
}

Ответ 8

Попробуйте следующее:

btCancel.FindForm().Close();

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

Ответ 9

this.Visible = false;
Form2 form2 = new Form2();
form2 .ShowDialog();
this.Close();

Ответ 10

new play().Show();
this.Dispose();

Ответ 11

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

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

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