我有一个包含许多TextBox的表单。我需要一组内的一些TextBox,以及另一组内的其他文本框。按组,我只需要一种方法来使这些TextBox看起来彼此属于。
我制作了两个面板并将TextBox添加到它们中。然后,我在这些面板周围放置了一个边框。
然而,我的问题是,当我按 Tab 时,焦点不会转到下一个TextBox,而是以随机顺序将转移到另一个TextBox 。有时下一个TextBox位于第一个Panel中,有时则位于第二个Panel中。如何控制焦点顺序?
这是一张图片来说明我的观点:
答案 0 :(得分:8)
Tab键顺序应该像这样设置。顶部容器面板应分别具有TabIndex 0和1,并且其子控件应具有其父控件Tab Index的TabIndex前缀。即。如果Panel1有TabIndex 0,那么它的子控件应该有TabIndex 0.0,0.1,0.2,0.3 ......
注意:确保如果任何控件的Tab Stop属性设置为false,则光标不会移动到该控件中。在这种情况下,TabIndex不起作用。
答案 1 :(得分:6)
正如其他人所说,使用TabIndex
属性来指示Tab键顺序,使用TabStop
属性来确定控件是否可以被选中。
然而,设计师可以采用更简单的方法。在设计器中查看表单时,请确保选中表单(而不是表单上的控件)(可以通过在表单周围的空白处单击一次来完成此操作),然后选择 查看 - >标签顺序 。
在Tab键顺序设计器处于活动状态时,您将看到每个控件的TabIndex
es。按照您希望能够通过它们的顺序单击它们。分配时,TabIndex
工具提示会从蓝色变为白色。完成后,选择 查看 - >再次按Tab键 返回正常的设计师状态。
另外要提到的是建议尽可能使用UserControl
。如果您使用UserControl
的良好设计重用部分UI,则可以避免使用包含数十个和数十个制表位的表单进行分配,因为每个UserControl
都有自己的内部制表顺序,放置在表单上时自动应用,您只需设置TabIndex
本身的UserControl
。
答案 2 :(得分:1)
当您在设计器上选择文本框时,您应该会看到名为TabIndex的文本框的属性。在通过控件进行选项卡时,焦点将转到具有下一个最高TabIndex的组件。
您需要为每个框设置TabIndex,以便标签按照您期望的顺序在框中旋转。
答案 3 :(得分:1)
您需要设置TextBox
控件的TabIndex
属性。
来自MSDN:Control.TabIndex
获取或设置控件在其容器中的Tab键顺序。
对于要包含在Tab键顺序中的控件,其TabStop属性 必须设置为true。
试试这个:(示例)
txtTextBox1.TabIndex = 1;
txtTextBox2.TabIndex = 2;
txtTextBox3.TabIndex = 3;
在上面的例子中,Tab Focus命令如下:
txtTextBox1
txtTextBox2
txtTextBox3
注意:您需要确保文本框控件的TabStop
属性设置为True,否则Tab键排序不起作用,但默认情况下,使用{{设计控件时1}}(使用拖放功能)Visual Studio IDE
属性设置为TabStop
。
来自MSDN:Control.TabStop
获取或设置一个值,该值指示用户是否可以使用TAB键将焦点赋予此控件。
试一试:设置True
属性
TabStop
答案 4 :(得分:1)
选项卡索引可以包含任何大于或等于的有效整数 零,较低的数字在Tab键顺序中较早。如果不止一个 对同一父控件的控制具有相同的选项卡索引,即z顺序 控件的数量决定了循环控件的顺序。
对于要包含在Tab键顺序中的控件,其TabStop属性 必须设置为true。
因此,
textbox1.TabIndex = 1; // and do the same for each one in the desired order
textbox1.TabStop = true;