我想展示一个表单,但我不希望任何控件都集中在一起。例如,现在当显示表单时,具有tabindex 0的按钮被聚焦。我希望表单本身而不是按钮能够被聚焦,因此如果用户意外点击某个键,它就不会做任何事情。这可能吗?谢谢!
答案 0 :(得分:3)
尝试此操作:在表单中添加Panel
控件并保留默认设置。面板可以有任何尺寸,可以放在任何地方。我将此成员称为m_panel
。在构造函数中,将表单的ActiveControl
属性设置为m_panel
。最后,确保面板的TabStop
属性设置为false
(默认情况下)。
加载表单后,m_panel
将获得焦点。但是,由于面板没有边框并且与表单背景颜色相同,因此没有迹象表明它存在,因此您可以有效地说表单本身具有焦点,如您所愿。当用户首次点击Tab或点击某个控件时,该面板将不在等式中(因为TabStop
为false
)并且事情将正常工作。
注意:您也可以使用空的Label
而不是Panel
,无论您身在何处。您甚至可以使用现有标签之一。请务必使用ActiveControl
指定感兴趣的控件,或通过调用Focus
明确地将其集中,因为它不会自动获得焦点。
答案 1 :(得分:3)
您最初可能会将焦点放在相对无害的地方,例如“取消”按钮,如果您的表单包含此类内容。
我测试过的解决方法;
private void Form1_Shown(object sender, EventArgs e)
{
textBox1.TabStop = false;
textBox1.Focus();
textBox1.Left = -300;
}
通过将文本框移出可见区域,可以“隐藏”文本框。 通过以这种hackish方式进行,文本框保留了聚焦的能力。
[编辑] 这(显然)要求您在表单上有一个名为textBox1的文本框,该文本框不用于其他任何内容。
答案 2 :(得分:1)
您可以在MyInvisibleLabel.Select();
中_Load
,或者如果您有{{1}},只需关注退出/取消/关闭按钮。
答案 3 :(得分:0)
TextBox1.Focus();
在Form_Shown或Form_Load事件中。
答案 4 :(得分:0)
您可以为每个控件将TabStop属性设置为false,但是您将无法通过控件进行制表。这可能是也可能不是一个很好的解决方案,但它应该保持任何控件接收输入,直到用户点击它。
答案 5 :(得分:0)
vaitrafra的答案已经足够,但如果您的表单上碰巧有标签,那么您也可以将焦点设置为该标签。接受的答案here提供了更深入的了解为什么您无法确保表单上的每个控件都没有焦点。
答案 6 :(得分:0)
如果您在加载页面时将标签设置为焦点,那么它将无法正常工作。
您需要做的是将页面的活动控件设置为您要关注的标签而不是文本框。
ex:this.ActiveControl = lbltest;
答案 7 :(得分:0)
最简单的解决方案是:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
ActiveControl = null;
}
或者,如果所有控件都停靠在要填充的面板内,您可以对该面板进行聚焦:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
pnlMain.Focus();
}
无论采用哪种方法,按Tab键都会将第一个控件聚焦在Tab键顺序中。