我已经在C#表单中获得了TextBoxes。用户输入数据,然后当他们离开控件时(几乎总是按Tab键),我检查数据以确保它有效。如果它无效,我想突出显示它们的文本,以便它们可以立即修复它而不必单击它。
现在,在Control.Leave上,我验证他们的条目。这很好用。但是,由于他们点击了Tab,在他们解除错误消息之后,它会继续发送到下一个对象,即使我已经得到了{(TextBox)sender).Focus();
如何在表单之后将上述行激活到下一个控件。
答案 0 :(得分:1)
您可能需要查看Control.CausesValidation属性
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation(v=vs.110).aspx
您可以在用户离开焦点之前验证控件,而不是等待Focus移动自身。
这里是Control.Validating事件的MSDN文档,在获取/失去控件焦点时,可以很好地规划事件序列。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating(v=vs.110).aspx
注意在Control.LostFocus之前如何启动Control.Validating和Control.Validated。您可以在之前执行验证步骤,以允许用户失去文本框的焦点。
在stackoverflow.com上还有一个非常好的先前答案,其中概述了如何执行此操作:C# Validating input for textbox on winforms
答案 1 :(得分:1)
如果您处理Control.Validating事件,将e.Cancel设置为true将停止发生焦点更改。
请注意,此方法也会停止按钮工作,因此您可能需要在某些按钮上将Control.CausesValidation设置为false。
您还需要在主窗体上使用以下代码段才能使关闭按钮起作用:
protected override void OnFormClosing(FormClosingEventArgs e) {
e.Cancel = false;
base.OnFormClosing(e);
}
答案 2 :(得分:0)
尝试使用LostFocus
上的TextBox
事件重新聚焦