FormClosing メソッドの Yes/No/Cancel メッセージボックスのキャンセル ボタンの処理
-
12-09-2019 - |
質問
を置きました はい/いいえ/キャンセルメッセージボックス で フォームの終了 私のフォームのメソッド。これがメッセージボックスのテキストです: データを保存しますか?
私は専門家ではないので、ユーザーがクリックした場合の対処方法がわかりません キャンセル ボタン?「キャンセル」ボタンをクリックした結果は、「フォームは開いたまま」になるはずです。
フォームが閉じてしまうことを防ぐ方法 フォームの終了 方法?
これまでに次のように書きました。;)
DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);
//...
else if (dr == DialogResult.Cancel)
{
???
}
コードを完成させるのを手伝ってください!
ありがとう
解決
FormClosing には Boolean パラメータがあり、関数が戻るときに True に設定すると、フォーム (IIRC) を閉じるのがキャンセルされます。
編集:例えば、
private void Form1_FormClosing(Object sender, FormClosingEventArgs e) {
// Set e.Cancel to Boolean true to cancel closing the form
}
他のヒント
実際には、イベントハンドラーが不足していると思います。ああ、偶数ハンドラーがなくてもそれに頼ることはできません。次のようなイベント ハンドラーを使用してイベントを追加する必要があります。
private void myform_Closing(object sender, FormClosingEventArgs e)
{
DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning)
if (dr == DialogResult.Cancel)
{
e.Cancel = true;
return;
}
else if (dr == DialogResult.Yes)
{
//TODO: Save
}
}
//now add a default constructor
public myform() // here use your form name.
{
this.FormClosing += new FormClosingEventHandler(myform_Closing);
}
C# で書いてここにコピー&ペーストしたわけではないので、このコードのスペルが間違っている場合はご容赦ください。さっきここに書きました。:)
次のようなものが考えられます。
if(dr == DialogResult.Cancel)
{
e.Cancel = true;
}
else if(dr == DialogResult.Yes)
{
//Save the data
}
上記のコードは、「はい」または「いいえ」を選択した場合にのみフォームを閉じ、「はい」を選択した場合にデータを保存します。
この機能を試してみるといいでしょう
public DialogResult msgClose(string msg)
{
return MessageBox.Show(msg, "Close", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
}
そしてこのように使用されます。
private void frm_FormClosing(object sender, FormClosingEventArgs e)
{
if (conn.msgClose("Application close?") == DialogResult.No)
e.Cancel = true;
else
{
this.Close();
}
}
これを試すことができます:
if (MessageBox.Show("Are you sure you want to quit?", "Attention!!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//this block will be executed only when Yes is selected
MessageBox.Show("Data Deleted", "Done", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
//this block will be executed when No/Cancel is selected
//the effect of selecting No/Cancel is same in MessageBox (particularly in this event)
}
必要に応じて、同じことができます No
そして Cancel
を使用してボタンをクリックする DialogResult
クラス
所属していません StackOverflow