繁体   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