[英]Track closing event of windows form with validation of button clicked in the form
我有一個包含關閉按鈕的表單(表單中有很多控件,但是我關心的是close事件)和一個保存按鈕。
如果表單在某些文本框中具有值(例如TextBox1),
然后,我想在關閉表單之前驗證是否單擊了保存按鈕(是否按下了關閉按鈕或頂部的“ X”按鈕)。
但是,如果在該文本框中沒有任何值,或者表單只是初始化了,而用戶只想關閉表單,則它只是關閉表單。 如何執行此驗證。
我將遵循99%的Windows應用程序的模式:允許關閉一個窗口,但是詢問是否保存更改。 這是該模式的簡單實現:
private bool _hasChanges;
private void textBox1_TextChanged(object sender, EventArgs e)
{
this._hasChanges = true;
}
private void form_FormClosing(object sender, FormClosingEventArgs e)
{
if (this._hasChanges)
{
var dialogResult = MessageBox.Show("Save changes?", "Confirm", MessageBoxButtons.YesNoCancel);
switch (dialogResult)
{
case DialogResult.Yes:
this.Save();
break;
case DialogResult.No:
this._hasChanges = false;
break;
}
e.Cancel = this._hasChanges;
}
}
private void Save()
{
// Save
this._hasChanges = false;
}
private void buttonSave_Click(object sender, EventArgs e)
{
this.Save();
}
private void buttonOk_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
this._hasChanges = false;
this.Close();
}
關鍵部分是布爾值_hasChanges
。 如果有許多控件可能導致更改,則可能會很痛苦。 一種替代方法是對實現INotifyPropertyChanged
的類使用數據綁定並預訂其PropertyChanged
事件。
綁定結束事件,並使用EventHandler驗證該文本框。 請記住,關閉是在關閉表單時發生的,並且(如果內存服務器正確)在eventarg上有一個屬性,可讓您取消關閉表單。 無論如何執行請求,都會引發此事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.