2012-03-26 42 views
3

ユーザーがWindowsフォームで閉じるボタンをクリックした場合、イベントハンドラがあるかどうか疑問に思っていました。私の初期の計画は、ユーザーが閉じるボタンをクリックしたとき、呼び出し元またはそのフォームを呼び出した人にブール値を返します。たとえばウィンドウで閉じるボタンをクリックしたときのイベントハンドラ

public void newWindow(){ 

     NewForm nw = new NewForm(); 
     nw.ShowDialog(); 
     if(nw.isClosed){ 
     do something 
    } 

} 

は可能ですか?

+0

に登録しますフォームからのFormCloseまたはFormClosingイベント – Zenwalker

+0

どういう意味ですか? – user962206

+0

System.Windows.Formsクラスは、いくつかのイベントに影響を与えます。そのMSDNを行ってください。あなたはフォームを閉じるイベントを取得する方法についていくつかのアイデアを得る – Zenwalker

答えて

5

.ShowDialog()を使用している場合は、DialogResultプロパティを使用して結果を取得できます。 Form1上にあなたのクリックイベントハンドラで次に

public void newWindow() 
{ 
    Form1 nw = new Form1(); 
    DialogResult result = nw.ShowDialog(); 
    //do something after the dialog closed... 
} 

:あなたは、ダイアログなどの新しいフォームを開くにはしたくない場合は

private void buttonOk_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.OK; 
} 

private void buttonCancel_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Cancel; 
} 

、あなたはこれを行うことができます。

public void newWindow() 
{ 
    Form2 nw = new Form2(); 
    nw.FormClosed += nw_FormClosed; 
    nw.Show(); 
} 

void nw_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    var form = sender as Form2; 

    form.FormClosed -= nw_FormClosed; //unhook the event handler 

    //you can still retrieve the DialogResult if you want it... 
    DialogResult result = form.DialogResult; 
    //do something 
} 
+0

フォームを閉じるイベントを使用できますか? buttonOk_Click()ではなく? – user962206

+0

ありがとうございました!私はShowDialog()がダイアログ結果を返すことは知らなかった – user962206

0

あなたはほぼそこにいます!ダイアログはすぐに解除されていない:

あなたは、このことを知っている「リターン」そのダイアログから値をする必要がある場合はnw

を閉じられますとき、ライン do somethingのみ実行されます if(nw.isClosed)を必要としません。あなたがそれを閉じるとき。ですから、このような何かを行うことができます。

NewForm nw = new NewForm(); 
nw.ShowDialog(); 
var x = nw.Property1 
+0

var xの使用は何ですか? – user962206

+0

これは、他のフォームの値にアクセスする場合に実行したいことの例です。それ以外の場合は、doSomething()メソッド呼び出し、または必要に応じてそれを置き換えることができます。ダイアログフォームが閉じられると実行されます。 – Mathieu

1

あなたはFormClosingイベントを見てみる必要があるか、ShowDialogを使用しているので、あなたがこのような何かを行うことができます。 FormClosingイベントで返されたDialogResultを変更することもできます。

DialogResult dr = nw.ShowDialog(); 
if (dr == DialogResult.Cancel) 
{ 
    //Do Stuff 
} 
+0

したがって、FormClosingイベントにそのコード行を挿入しますか? – user962206

+1

DialogResultをNewFormのFormClosingメソッドで変更し、私が示したコードでテストすることができます。 Xをクリックしてフォームを終了すると、デフォルトのDialogResultがキャンセルされます。メソッドのbuttonOk_Click()で代わりに –

関連する問題