单击所选行中的控件时将触发 LostFocus 事件处理程序
本文关键字:LostFocus 程序 事件处理 控件 单击 | 更新日期: 2023-09-27 18:36:11
我有一个包含几列的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
事件代替LostFocus
。
当显示单元格的编辑控件时,也会触发LostFocus
但Validating
仅在DataGridView
不再对窗体进行活动控制或Form
上调用ValidateChildren
时触发。
void dataGridView1_Validating(object sender, CancelEventArgs e)
{
//Perform Validation Here
}
请注意,当您离开DataGridView
时,仅当新活动控件的 CausesValidation
属性设置为 true 时,才会触发Validating
。
因此,根据您的要求,您可能希望改用Leave
事件。
嵌套
控件时,应将每个嵌套控件上的 CausesValidation
属性设置为 false,然后在 LostFocus
事件上使用 Validating
事件来验证数据,然后在成功时继续流Validated
事件。如果要让焦点更改触发非验证事件,并且希望它通过嵌套层次结构进行更新,则应考虑使用 Leave
而不是LostFocus
,因为 LostFocus 非常靠近金属并保留手柄包含控件。