web-dev-qa-db-ja.com

フォームを閉じてから別のフォームを呼び出す

現在開いているフォーム(MainForm)を閉じてから、2番目のフォーム(Form)を開きます。

私はもう試した:

_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()を選択すると、すぐに両方のフォームが閉じられます。

15
elvispt

変化する

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

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);
    }
  }
}
6
Hans Passant

これは私にとってはうまくいきます...

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

This.Close();を置き換えるだけです。 this.Hide();それは完璧に動作します!

0
Essam Mohamed

閉じようとするのではなく、フォーム自体を有効または無効にします。

次のようにコーディングします。

this.enabled = false;

クリックイベントまたは任意の場所で。

それが役に立てば幸い。

0
rrkbca86
_Form2 frm2 = new Form2();
frm2.ShowDialog();
_

そして

_this.Close();
_

良い組み合わせではありません。

frm2は実際にロードされますが、this.Close();がすべてのフォームを1ミリ秒で閉じるため、あなたはそれを見ることさえできません...

_this.Hide();
_

動作します...

0
nicOL