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