6

ShowDialog を使用してフォームをモーダル ダイアログとして開きます。このダイアログでは、ShowDialog を使用して、モーダル ダイアログとして別のフォームを開くことができます。

最も内側のダイアログが閉じられると、その親ダイアログも閉じられます。なぜこれが発生し、どうすれば防ぐことができますか?

これを説明するために、問題の Hello World バージョンを作成しました。

フォーム 1:

フォーム1

private void OpenForm2Button_Click(object sender, EventArgs e)
{
    Form2 testForm = new Form2();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog();
    MessageBox.Show("Form 2 returned: " + Convert.ToString(dialogResult));
}

フォーム 2:

フォーム2

...
this.Form2OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Form2CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
...
this.AcceptButton = this.Form2OKButton;
this.CancelButton = this.Form2CancelButton;
...
private void OpenForm3Button_Click(object sender, EventArgs e)
{
    Form3 testForm = new Form3();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog();
    MessageBox.Show("Form 3 returned: " + Convert.ToString(dialogResult));
}

フォーム 3:

フォーム3

...
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Form3CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
...
this.AcceptButton = this.Form3OKButton;
this.CancelButton = this.Form3CancelButton;

再現する手順:

  • 「フォーム2を開く」をクリック
  • 「フォーム3を開く」をクリック
  • 「キャンセル」をクリック

フォーム 3 は予想どおり DialogResult == Cancel で閉じますが、フォーム 2 も DialogResult == Cancel (予想外) で閉じます。

4

1 に答える 1

16

編集 :

問題はこれです(ファイル:)Form2.Designer.cs

this.OpenForm3Button.DialogResult = System.Windows.Forms.DialogResult.Cancel;

をクリックすると、イベントハンドラOpenForm3Buttonの終了後、自動的に に設定されて閉じます。OpenForm3Button_Clickform.DialogResultCancel

DialogResultのプロパティをリセットするOpenForm3Buttonと、期待どおりに機能します:)

于 2012-03-20T18:07:31.007 に答える