C# 单击选定行中的控件时,将触发LostFocus事件处理程序

C# 单击选定行中的控件时,将触发LostFocus事件处理程序,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView,它有几个列,包括按钮和组合框。我正在尝试实现一个验证,当DataGridView失去焦点时会触发该验证,并按预期工作。但是,在DataGridView中从文本列移动到非文本(按钮、组合框)列时,也会触发相同的验证 有人对如何解决这个问题有什么建议吗?我尝试了各种可能的解决办法,但未能完全解决问题 下面是我为事件处理程序和事件处理程序初始值设定项编写的代码: 初始值设定项: dgvCopy.LostFocus += dgvCopy_LostFocus; 事件处理

我有一个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;
    }
}

非常感谢您的任何帮助或建议

您可以使用
验证
事件而不是
丢失焦点

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时,验证才会触发。因此,根据您的要求,您可能希望改用休假事件。