【问题标题】:On leaving a control, how can I give that control focus again?离开控件后,如何再次赋予该控件焦点?
【发布时间】:2014-11-17 23:57:57
【问题描述】:

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

现在,在 Control.Leave 上,我验证了他们的输入。这工作得很好。然而,由于他们点击了 Tab,在他们关闭错误消息后,它会继续到下一个对象,即使我有 ((TextBox)sender).Focus();

我怎样才能让上面的行触发表单选项卡到下一个控件。

【问题讨论】:

    标签: c# forms focus controls


    【解决方案1】:

    尝试在TextBox 上使用LostFocus 事件再次聚焦

    【讨论】:

      【解决方案2】:

      您可能需要查看 Control.CausesValidation 属性

      http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation(v=vs.110).aspx

      您可以在用户离开焦点之前验证控件,而不是等待焦点自行移动。

      这里是 Control.Validating 事件的 MSDN 文档,在获得/失去 Control 焦点时很好地布置了事件序列。

      http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating(v=vs.110).aspx

      注意 Control.Validating 和 Control.Validated 是如何在 Control.LostFocus 之前启动的。您可以在之前执行验证步骤,以使用户失去对文本框的关注。

      stackoverflow.com 上也有一个很好的先前答案,其中概述了如何做到这一点:C# Validating input for textbox on winforms

      【讨论】:

        【解决方案3】:

        如果您处理 Control.Validating 事件,将 e.Cancel 设置为 true 将停止发生焦点更改。

        请注意,此方法也会使按钮停止工作,因此您可能需要在某些按钮上将 Control.CausesValidation 设置为 false。

        您还需要在主窗体上使用以下 sn-p 以允许关闭按钮工作:

        protected override void OnFormClosing(FormClosingEventArgs e) {
            e.Cancel = false;
            base.OnFormClosing(e);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          相关资源
          最近更新 更多