2011-08-23 2 views

答えて

17

これは意図した動作であるため、これは完全に正常です。ただし、MDIまたはShowDialog()を使用している場合は、フォームの右上隅にある赤い "X"をクリックするのと同じではありません。

フォームがフォームが非表示になり 閉じる ボタン(フォームの右上隅にあるXの付いたボタン)をクリックし、モーダルダイアログボックスとして表示され

とDialogResultプロパティにDialogResult.Cancelに を設定してください。ユーザーがダイアログボックスの閉じるボタンをクリックするか、DialogResultプロパティの 値を設定すると、Closeメソッドは自動的に と呼ばれません。代わりに、フォームが非表示になり、ダイアログボックスの新しいインスタンスを作成せずに を再度表示することができます。 この現象のため、アプリケーションでフォームが不要になったときに、フォーム のDisposeメソッドを呼び出す必要があります。

DialogResult値はかかわらず、上書きすることができます。

ユーザーを するためのイベントハンドラにDialogResultプロパティ を設定することで、[閉じる]ボタンをクリックしたときにあなたがDialogResultプロパティに割り当てられた値を上書きすることができますフォームの終了イベント。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult(v=VS.100).aspx

+0

を実際にキャンセルするDialogResult値を設定する閉じる()メソッドの正常な、意図した動作を説明するすべてのドキュメントがありますか? – Fernando

+0

私はそれを見つけることができませんでした。ただし、Close()と閉じるボタンをクリックする唯一の違いは、上記の条件が満たされていればフォームが破棄されないことです。つまり、DialogResultへの代入は同じです(キャンセル)。 Noneにする必要がある場合は、上記の方法で上書きできます。 –

24

あるいはさらに簡単に、あなただけのクローズ後にDialogResultを設定することができます。例えば、仮定ValidateSettingsは、ユーザーにフォームに問題が表示されますか、そうでない場合はtrueを返す:

private void btnOK_Click(object sender, EventArgs e) 
    { 
     if (ValidateSettings()) 
     { 
      SaveSettings(); 
      Close(); 
      DialogResult = DialogResult.OK; 
     } 
    } 
+0

注:WPFでは、フォームが閉じられた後、 'Window.DialogResult'を変更することはできません。 –

+1

@Zéiksz - これはWinformsの質問です。このコードは、その環境でテストしたWinformsの回答でした。 Ruby on Railsでは動作しないため、下位投票になるかもしれませんが、それはちょっと不公平です。あるいは私は何かが欠けています。なぜなら私はずっとJavaで働いていたからです。 :) –

+0

私はdownvoteか何かをしなかった...ちょうどいくつかのWPF情報に注意してください。この質問で実際に研究している人(私がやったように、他の人もこの情報を使うかもしれないと思っています - ここにあります)のあなたの答えは、はい、しかし役に立つ拡張です。あなたがそれを犯罪とみなした場合は申し訳ありませんが、私はそのコメントを削除します。 –

関連する問題