2009-07-19 8 views
0

C#+ VSTS2008 + .Net 2.0を使用してWindowsフォームアプリケーションを開発しています。 Form1のbutton1イベントハンドラでForm2を作成し、Form2を表示します。次に、Form2のbutton2(button2がForm2のUIボタン要素)のトリガイベントハンドラがbutton2イベントハンドラを実行した後、Form2が消えます。 Form2を作成する私のコードの一部です。どのようなアイデアがForm2が消える原因に間違っている?C#Windowsフォームが突然消えます。

// button1 belongs to Form1 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2("www.google.com"); 
    form2.ShowDialog(); 
} 
+2

Button2_Clickを処理しているコードを表示できますか? –

+1

button2イベントハンドラをポストします –

+0

button2のイベントハンドラは空です。どんなアイデアが間違っている? – George2

答えて

4

Form2がダイアログとして開かれています。ボタンを押しても、CancelButtonとして定義できます(CancelButtonプロパティはform2上にあります)。これを行うと、イベントハンドラが完了したときに自動的にダイアログが閉じられます。

+1

面白いことに、AcceptButtonを設定すると自動的にフォームが閉じられません。それは一貫していないように見えるかもしれませんが、論理的です。キャンセルする場合は、通常は離脱したいと思っていますが、受け入れる前にいくつかの作業を含めることができますし、ダイアログが残るようにしたい場合もあります(たとえば、いくつかの検証に失敗した場合)。 –

3

は詳細がなければ、それは確かに言うことは不可能だが、Form2にButton2の場合DialogResultプロパティに割り当てられた値を持っている、これは、ボタンがクリックされたときにフォームが自動的に非表示になります。デザイナーでForm2を開き、ボタンを選択してプロパティグリッドをチェックインします。 DialogResultプロパティが "None"以外の場合、これは予想される動作です。 Button.DialogResultプロパティのMSDNドキュメントから

このプロパティ ためDialogResultは、None以外に設定 と親フォームがShowDialog方法で を表示した場合されている場合は、 ボタンをクリックすると、親なし フォームが閉じられます。 イベントを接続する必要はありません。 ボタンをクリックすると、フォームのDialogResult プロパティがボタンの DialogResultに設定されます。

+0

button2のイベントハンドラは空です。どんなアイデアが間違っている? – George2

+2

私の答えをもう一度読む。それはイベントハンドラではなく、button2のDialogResultプロパティに関するものです。しかし、イベントハンドラが空の場合、それは動作を引き起こすのはDialogResultプロパティであるという私の疑惑を強める。 –

+0

ボタン2のダイアログ結果が「なし」であることを確認しました。これは期待値ですか? – George2

関連する問題