私は、ShowDialogを使用してモーダルダイアログとしてフォームを開きます。このダイアログでは、ShowDialogを使用して別のフォームを再びモーダルダイアログとして開くことができます。なぜ、ネストされた子ダイアログを閉じると、親ダイアログも閉じますか?
最も内側のダイアログを閉じると、親ダイアログも閉じます。なぜこれが起こり、どうすればそれを防ぐことができますか?
私はこれを説明するために問題のhello worldバージョンを作成しました。
フォーム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:
...
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:
...
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 ==キャンセルは期待どおりですが、フォーム2もDialogResult == Cancel(期待していません)で終了します。
MMHは、私が試した、それは[私のマシン上で正常に動作](http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c- pi)。問題を理解するためのコード全体を見るべきです。あなたは長いコードを貼り付けるためにhttp://pastebin.com/を使うことができます... – digEmAll
私のためにも動作します。 –
私はここにコードをペーストしました:http://pastebin.com/Dj81gAze –