C#CancelButtonは、ダイアログを閉じますか?
-
21-09-2019 - |
質問
(VS2005、.NET 2.0)
IはにShowDialog()メソッドを使用して、ダイアログボックスとして表示される形態を有します。フォームのCancelButtonプロパティは、フォーム上のボタンに設定されています。私はNoneにそのボタンのDialogResultを設定しても、ボタンをクリックすると、まだダイアログを閉じます。私はこれが起こることを望んでいない - 私は、ダイアログが閉じたか否かを制御することができるようにしたい。
。 その後、近くにそれを引き起こすかどうかを手動で設定フォームのDialogResultを決める、誰にもそのボタンのDialogResultを設定して、私は処理が必要なものを行うことができます。この問題は、フォームのAcceptButtonでは発生しません。 >私はCancelButtonプロパティはエスケープは(AcceptButtonだけに、ボタンを示すことになっていると押されたときに入力してずっと「クリック」)が押された場合、「クリック」しなければならないボタンを示すために、ソリーのものだったと思いました。この中アムIの間違っていますか?私は自分のフォームが閉じている他のいくつかの理由を逃したことがありますか?それとも、これはバグですか?
編集:コードが追加されました。これは、キャンセルボタン(ボタン1)との対話形式(形態2)です。 それはDialogResultをキャンセルするように設定されていない、ボタンは形だけのCancelButtonでキャンセルが、ボタンを押すと、まだフォームを閉じます。
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Name = "button1";
this.button1.Text = "button1";
//
// Form2
//
this.CancelButton = this.button1;
this.Controls.Add( this.button1 );
this.Name = "Form2";
this.Text = "Form2";
this.ResumeLayout( false );
}
解決
また、フォームはAltキー+ F4を押し、Xボタンと両方の方法を押すことで閉じることができることに注意してくださいトリガされませんボタンのクリックイベントをキャンセルします。
あなたはまた、それがslurdgeのアドバイスに従うとFormClosingイベントで閉じてからフォームを防ぐために最善ではないでしょう、これらの状況を処理している場合を除きます。
の編集を また、[プロパティ]ウィンドウで[なしにボタンバックのDialogResultを変更した場合は、デフォルト値に変更されていることに注意してください。値がプロパティのデフォルト値である場合、それは* .Designer.csに永続化されることはありません。それは、フォームの初期化コードを持続した場合でも、* .Designer.csの最後に配置されているためラインのキャンセルでNoneをオーバーライドしないだろう。
this.CancelButton = this.button1;
あなたはリフレクターで確認することができたよう前の行には、これを行います:
public void set_CancelButton(IButtonControl value)
{
base.Properties.SetObject(PropCancelButton, value);
if ((value != null) && (value.DialogResult == DialogResult.None))
{
value.DialogResult = DialogResult.Cancel;
}
}
あなたはのInitializeComponent()呼び出しの後に戻ってコンストラクタでなしに変更することができます。
他のヒント
フォームを閉じるの検証を実行したいようだ。
FormClosingイベントは、このために最適です。これは近いかを制御するために同じコードを持つことができますでしょう。
ただ、閉鎖を防ぐために、trueにキャンセルプロパティを設定します。
FormClosing のを参照してください。
これはデフォルトの動作です。
MSDNから
このプロパティは、ユーザーがアプリケーション内のESCキーを押したときに発生するデフォルトのアクションを指定することができます。すぐに彼らは単に変更をコミットする代わりに、手動でマウスで[キャンセル]ボタンをクリックせずにウィンドウを閉じるには、ESCキーを押してできるようにすることで、簡単なフォームをナビゲートするには、ユーザーを許可するには、このプロパティを使用することができます。
、form_closingイベントでそれを処理します。
MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult == DialogResult.Cancel)
{
// do my processing ...
if (false)
e.Cancel = true; // stop the form from closing
}
}
私扱う私のここでのボタンのコードを受け入れるも、私は何を想定!= DialogResult.OKがキャンセルされていますが、あなたのために快適であるものは何でも行うことができます。