簡體   English   中英

通過驗證表單中單擊的按鈕來跟蹤Windows表單的關閉事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM