C# 单击选定行中的控件时,将触发LostFocus事件处理程序
我有一个DataGridView,它有几个列,包括按钮和组合框。我正在尝试实现一个验证,当DataGridView失去焦点时会触发该验证,并按预期工作。但是,在DataGridView中从文本列移动到非文本(按钮、组合框)列时,也会触发相同的验证 有人对如何解决这个问题有什么建议吗?我尝试了各种可能的解决办法,但未能完全解决问题 下面是我为事件处理程序和事件处理程序初始值设定项编写的代码: 初始值设定项:C# 单击选定行中的控件时,将触发LostFocus事件处理程序,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView,它有几个列,包括按钮和组合框。我正在尝试实现一个验证,当DataGridView失去焦点时会触发该验证,并按预期工作。但是,在DataGridView中从文本列移动到非文本(按钮、组合框)列时,也会触发相同的验证 有人对如何解决这个问题有什么建议吗?我尝试了各种可能的解决办法,但未能完全解决问题 下面是我为事件处理程序和事件处理程序初始值设定项编写的代码: 初始值设定项: dgvCopy.LostFocus += dgvCopy_LostFocus; 事件处理
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;
}
}
非常感谢您的任何帮助或建议 您可以使用
验证
事件而不是丢失焦点
LostFocus
在单元格的编辑控件显示时也会触发,但是验证
仅在DataGridView
不再是窗体的活动控件时,或者在窗体上调用ValidateChildren
时才会触发
void dataGridView1_Validating(object sender, CancelEventArgs e)
{
//Perform Validation Here
}
请注意,当您离开DataGridView
时,只有当新活动控件的CausesValidation
属性设置为true时,Validating
才会触发。
因此,根据您的要求,您可能希望使用Leave
事件来代替。嵌套控件时,应将每个嵌套控件上的CausesValidation
属性设置为false,然后在LostFocus
事件上使用Validating
事件来验证数据,然后,验证了
事件,以在成功时继续流。如果您希望有焦点更改非验证事件,并且希望通过嵌套层次来更新,则应该考虑使用<代码>离开<代码>,而不是<代码> ListCopys,由于LostFocus与金属非常接近,并且将句柄保留在控件中。请注意,当您离开DataGridView时,仅当新活动控件的CausesValidation属性设置为true时,验证才会触发。因此,根据您的要求,您可能希望改用休假事件。