Winforms 如何创建带有永远不会吸引键盘焦点的按钮的winform

Winforms 如何创建带有永远不会吸引键盘焦点的按钮的winform,winforms,button,keyboard,focus,Winforms,Button,Keyboard,Focus,我的winform上有几个文本框。我也有一些按钮。现在,当我在一个这样的文本框中键入并单击一个按钮时,文本框中的输入焦点将丢失,该按钮将获得输入键盘焦点。也就是说,当我们单击按钮时,光标从文本框中丢失。我不想要这种行为。我希望我的文本框即使在单击按钮时也能将光标保留在文本框内。 实际情况是,我的文本框和数字按钮只能在触摸屏上使用。您可以在按钮上设置文本框的焦点,单击事件处理程序,如下所示: private void Button_Click(...) { FocusTextBox();

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

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

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

private void FocusTextBox()
{
    textBox.Focus();
}
textBox1.Focus();

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

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

private void FocusTextBox()
{
    textBox.Focus();
}
textBox1.Focus();
这将阻止您的按钮在单击按钮时获得焦点

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


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

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

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

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

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

很高兴知道。是否有办法防止闪烁并使解决方案与多个文本框一起工作?如果有两个以上的文本框怎么办?@r.hamd-您误解了答案。在每个按钮单击处理程序中,您将焦点设置为其他一些控件。使用下一个焦点有意义的任何控件。一个合理的选择是将焦点设置为按钮后面的某个文本框。从视觉上看,如果有人对该文本框进行“选项卡式”操作,使其成为活动输入,这看起来是一样的。另一个好的选择是将焦点设置为表单上的第一个文本框。[编辑答案以澄清此问题。]请注意,将按钮的[TabStop]属性设置为
false
,虽然它确实符合OP的要求,即按钮“永远不会吸引键盘焦点”,但这会使表单无法由仅键盘用户使用。这在触摸屏上是不需要的,如果可能连接了键盘,就不应该这样做,因为这违反了可访问性标准。我建议不要这样做。如果有两个以上的文本框怎么办?