在离开控件时,如何再次给予控件焦点?

时间:2014-09-23 17:07:24

标签: c# forms focus controls

我已经在C#表单中获得了TextBoxes。用户输入数据,然后当他们离开控件时(几乎总是按Tab键),我检查数据以确保它有效。如果它无效,我想突出显示它们的文本,以便它们可以立即修复它而不必单击它。

现在,在Control.Leave上,我验证他们的条目。这很好用。但是,由于他们点击了Tab,在他们解除错误消息之后,它会继续发送到下一个对象,即使我已经得到了{(TextBox)sender).Focus();

如何在表单之后将上述行激活到下一个控件。

3 个答案:

答案 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事件重新聚焦