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