【发布时间】:2012-04-09 18:34:45
【问题描述】:
我的 winform 上有几个文本框。我也有几个按钮。现在,当我在一个这样的文本框上键入并单击一个按钮时,输入焦点从文本框中丢失,按钮获得输入键盘焦点。也就是说,当我们单击按钮时,光标从文本框中消失了。我不想要这种行为。即使单击按钮,我也希望我的文本框将光标保留在其中。 实际情况是我的文本框和数字按钮只能在触摸屏上使用。
【问题讨论】:
标签: winforms button keyboard focus
我的 winform 上有几个文本框。我也有几个按钮。现在,当我在一个这样的文本框上键入并单击一个按钮时,输入焦点从文本框中丢失,按钮获得输入键盘焦点。也就是说,当我们单击按钮时,光标从文本框中消失了。我不想要这种行为。即使单击按钮,我也希望我的文本框将光标保留在其中。 实际情况是我的文本框和数字按钮只能在触摸屏上使用。
【问题讨论】:
标签: winforms button keyboard focus
尝试创建您自己的按钮控件,该控件继承自标准控件但关闭Selectable 样式:
public class ButtonEx : Button {
public ButtonEx() {
this.SetStyle(ControlStyles.Selectable, false);
}
}
【讨论】:
TabStop = False 不起作用,但您的解决方案有效。
【讨论】:
false,虽然它确实符合 OP 要求按钮“从不吸引键盘焦点”的要求,但会使表单无法被纯键盘用户使用。这在触摸屏上是不需要的,如果可能连接了键盘,则不应这样做,因为它违反了可访问性标准。我建议不要这样做。
您可以将焦点设置到按钮单击事件处理程序上的文本框,如下所示:
private void Button_Click(...)
{
FocusTextBox();
// Do things...
}
private void FocusTextBox()
{
textBox.Focus();
}
【讨论】:
使用Focusable 属性创建自定义Button 类,将Focusable 设置为false
public class ButtonEx : Button
{
[DefaultValue(true)]
public bool Focusable
{
get { return GetStyle(ControlStyles.Selectable); }
set { SetStyle(ControlStyles.Selectable, value); }
}
}
【讨论】: