私のWinFormでClose()を呼び出すと、その時点でDialogResultがNoneであっても、Close()をコールした直後にCancelに設定されていることがわかります。WinForms Close()はDialogResultをキャンセルに設定します
これは正常ですか?
私のWinFormでClose()を呼び出すと、その時点でDialogResultがNoneであっても、Close()をコールした直後にCancelに設定されていることがわかります。WinForms Close()はDialogResultをキャンセルに設定します
これは正常ですか?
これは意図した動作であるため、これは完全に正常です。ただし、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
あるいはさらに簡単に、あなただけのクローズ後にDialogResultを設定することができます。例えば、仮定ValidateSettingsは、ユーザーにフォームに問題が表示されますか、そうでない場合はtrueを返す:
private void btnOK_Click(object sender, EventArgs e)
{
if (ValidateSettings())
{
SaveSettings();
Close();
DialogResult = DialogResult.OK;
}
}
注:WPFでは、フォームが閉じられた後、 'Window.DialogResult'を変更することはできません。 –
@Zéiksz - これはWinformsの質問です。このコードは、その環境でテストしたWinformsの回答でした。 Ruby on Railsでは動作しないため、下位投票になるかもしれませんが、それはちょっと不公平です。あるいは私は何かが欠けています。なぜなら私はずっとJavaで働いていたからです。 :) –
私はdownvoteか何かをしなかった...ちょうどいくつかのWPF情報に注意してください。この質問で実際に研究している人(私がやったように、他の人もこの情報を使うかもしれないと思っています - ここにあります)のあなたの答えは、はい、しかし役に立つ拡張です。あなたがそれを犯罪とみなした場合は申し訳ありませんが、私はそのコメントを削除します。 –
を実際にキャンセルするDialogResult値を設定する閉じる()メソッドの正常な、意図した動作を説明するすべてのドキュメントがありますか? – Fernando
私はそれを見つけることができませんでした。ただし、Close()と閉じるボタンをクリックする唯一の違いは、上記の条件が満たされていればフォームが破棄されないことです。つまり、DialogResultへの代入は同じです(キャンセル)。 Noneにする必要がある場合は、上記の方法で上書きできます。 –