簡體   English   中英

單擊所選行中的控件時,將觸發LostFocus事件處理程序

[英]LostFocus event handler is triggering when a control within the selected row is clicked

我有一個包含幾列的DataGridView,包括按鈕和組合框。 我正在嘗試實現一個驗證,該驗證在DataGridView失去焦點時觸發,並且按預期工作。 但是,從DataGridView中的“文本”列移動到非“文本”(按鈕,組合框)列時,也會觸發相同的驗證。

有人對如何解決這個問題有任何建議嗎? 我嘗試了各種可能的解決方案,但無法完全解決問題。

這是我的事件處理程序和事件處理程序初始化程序的代碼如下:

初始化:

dgvCopy.LostFocus += dgvCopy_LostFocus;

事件處理程序:

private void dgvCopy_LostFocus(object sender, EventArgs e) {
    if (dgvCopy.SelectedRows.Count > 0) {
        if (dgvCopy.SelectedRows[0].Cells["Type"].Value == null) {
            MessageBox.Show("Please choose a type");
            txtCopyText.Enabled = false;
        }
    else {
        txtCopyText.Enabled = true;
    }
}

任何幫助或建議,不勝感激!

您可以使用Validating event代替LostFocus
當顯示單元格的編輯控件時,也會LostFocus但是,僅當DataGridView不再是該窗體的活動控件時,或者當您在Form上調用ValidateChildren時,才會激活Validating

void dataGridView1_Validating(object sender, CancelEventArgs e)
{
    //Perform Validation Here
}

請注意,當您離開DataGridView時,僅當新的活動控件的CausesValidation屬性設置為true時, Validating才會觸發。
因此,根據您的要求,您可能需要使用Leave事件。

嵌套控件時,應將每個嵌套控件上的CausesValidation屬性設置為false,然后對LostFocus事件使用Validating事件來驗證數據,然后在Validated時繼續Validated事件。 如果要使焦點更改引發非驗證事件,並且希望通過嵌套層次結構進行更新,則應考慮使用Leave而不是LostFocus ,因為LostFocus與金屬非常接近,並且句柄包含控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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