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