如何控制面板内TextBox的焦点顺序?

时间:2014-07-26 00:08:48

标签: c# winforms windows-forms-designer

我有一个包含许多TextBox的表单。我需要一组内的一些TextBox,以及另一组内的其他文本框。按组,我只需要一种方法来使这些TextBox看起来彼此属于。

我制作了两个面板并将TextBox添加到它们中。然后,我在这些面板周围放置了一个边框。

然而,我的问题是,当我按 Tab 时,焦点不会转到下一个TextBox,而是以随机顺序将转移到另一个TextBox 。有时下一个TextBox位于第一个Panel中,有时则位于第二个Panel中。如何控制焦点顺序?

这是一张图片来说明我的观点:

an image to illustrate my point

5 个答案:

答案 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不起作用。

enter image description here

答案 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)

来自MSDN - Control.TabIndex

  

选项卡索引可以包含任何大于或等于的有效整数   零,较低的数字在Tab键顺序中较早。如果不止一个   对同一父控件的控制具有相同的选项卡索引,即z顺序   控件的数量决定了循环控件的顺序。

     

对于要包含在Tab键顺序中的控件,其TabStop属性   必须设置为true。

因此,

textbox1.TabIndex = 1; // and do the same for each one in the desired order
textbox1.TabStop = true;