【问题标题】:How to create a winform with buttons that will never attract keyboard focus如何创建一个永远不会吸引键盘焦点的按钮的winform
【发布时间】:2012-04-09 18:34:45
【问题描述】:

我的 winform 上有几个文本框。我也有几个按钮。现在,当我在一个这样的文本框上键入并单击一个按钮时,输入焦点从文本框中丢失,按钮获得输入键盘焦点。也就是说,当我们单击按钮时,光标从文本框中消失了。我不想要这种行为。即使单击按钮,我也希望我的文本框将光标保留在其中。 实际情况是我的文本框和数字按钮只能在触摸屏上使用。

【问题讨论】:

    标签: winforms button keyboard focus


    【解决方案1】:

    尝试创建您自己的按钮控件,该控件继承自标准控件但关闭Selectable 样式:

    public class ButtonEx : Button {
      public ButtonEx() {
        this.SetStyle(ControlStyles.Selectable, false);
      }
    }
    

    【讨论】:

    • 我有一个 TabControl 的案例,它的标签永远不应该是可聚焦的。 TabStop = False 不起作用,但您的解决方案有效。
    【解决方案2】:

    在您的按钮单击事件处理程序中,将焦点显式设置为其他一些控件。选择您认为在按下按钮后可以获得焦点的任何控件。例如,将焦点设置为 TextBox,使用如下代码:

    textBox1.Focus();
    

    这将防止您的按钮在单击按钮时获得焦点。

    此外,将按钮的 TabStop 属性设置为 false。

    建议您将 CanFocus 属性设置为 false 的其他答案将不起作用,因为该属性对于按钮是只读的。

    【讨论】:

    • 很高兴知道。有没有办法防止闪烁并使解决方案与超过 1 个 TextBox 一起工作?
    • 如果有两个以上的文本框怎么办?
    • @r.hamd - 你误解了答案。在每个按钮单击处理程序中,您将焦点设置到某个其他控件。使用任何让接下来有焦点有意义的控件。一个合乎逻辑的选择是将焦点设置到 某个文本框,该文本框位于 按钮之后。从视觉上看,如果有人“标签”到该文本框,使其成为活动输入,这看起来是一样的。另一个不错的选择是将焦点设置到表单上的第一个文本框。 [编辑答案以澄清这一点。]
    • 请注意,将按钮的 [TabStop] 属性设置为 false,虽然它确实符合 OP 要求按钮“从不吸引键盘焦点”的要求,但会使表单无法被纯键盘用户使用。这在触摸屏上是不需要的,如果可能连接了键盘,则不应这样做,因为它违反了可访问性标准。我建议不要这样做。
    【解决方案3】:

    您可以将焦点设置到按钮单击事件处理程序上的文本框,如下所示:

    private void Button_Click(...)
    {
        FocusTextBox();
        // Do things...
    }
    
    private void FocusTextBox()
    {
        textBox.Focus();
    }
    

    【讨论】:

    • 如果有两个以上的文本框怎么办?
    【解决方案4】:

    使用Focusable 属性创建自定义Button 类,将Focusable 设置为false

    public class ButtonEx : Button
    {
        [DefaultValue(true)]
        public bool Focusable
        {
            get { return GetStyle(ControlStyles.Selectable); }
            set { SetStyle(ControlStyles.Selectable, value); }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2020-10-07
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多