如何控制面板内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;