2009-07-14 17 views
10

C#/ .NET 3.5/WinFormsモーダルダイアログからのモーダルダイアログ - 秒が閉じられると閉じます - なぜですか?

別のモーダルダイアログフォームを開くモーダルダイアログフォームを開くフォームがあります。内部のダイアログフォームにはOKボタンとCancelボタンがあり、AcceptButtonとCancelButtonがそれぞれ設定されています。

内部のダイアログで[Enter]キーを押すか[OK]をクリックすると、外部ダイアログも閉じます。私はこれをやっているところを見ることができません - これは予想される行動ですか?

私はコードを提供できますが、私はこれを混乱させたくありませんでした。

+0

外部ダイアログは[ShowDialog経由で]モーダルで実行されていますか?コール後にデバッガでブレークポイントを配置できるはずです。しかし、私はあなたがしていることに何か微妙なことがあったかどうか尋ねなかったと思います... –

+0

ええ、私はコードを踏んだり、何かを打つことなく内側から外側に飛び出しました。 – serialhobbyist

答えて

17

これは、ShowDialogコールが所有者の状態も変更するためです。 (thisを参照してください。これは、長年の課題となっている

private void Button1_Click(object sender, EventArgs e) 
{ 
    InnerDialog inner = new InnerDialog() 
    DialogResult innerResult = inner.ShowDialog(this); 
    this.DialogResult = DialogResult.None; 
} 

あなたは第二のダイアログに ShowDialog呼び出した後 DialogResult.Noneに最初のモーダルダイアログの DialogResultをリセットする必要があり、これを防ぐために、役職)。

+0

それだけです。私はずっと前にこれを打つ気がしたが、私はそれを見つけることができず、Googleは助けなかった。問題が解決しました。どうもありがとう。 – serialhobbyist

+0

これはおそらく修正されていますか?私は.Net 3.5 SP1を持っていて、*この動作をしません。 – NascarEd

+0

おそらくそうです。私はちょうど.NET 3.5 SP1で試してみたが、その動作を得られなかった。私は間違いなく.Net 2.0でそれを持っていた。 – adrianbanks

0

私はこの記事を見つけ出すまで、これを一日中苦労しました。 .NET 4では修正されていません。