【问题标题】:How do I control the focus order for TextBoxes inside a panel?如何控制面板内文本框的焦点顺序?
【发布时间】:2014-07-26 00:08:48
【问题描述】:

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

我制作了两个面板并向它们添加了文本框。然后,我在这些面板周围放置了一个边框。

但是,我的问题是,当我按下 Tab 时,焦点不会转到下一个 TextBox,而是会随机转到另一个 TextBox .有时下一个文本框在第一个面板中,有时在第二个面板中。如何控制焦点顺序?

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

【问题讨论】:

  • 正如其他人所说,使用TabIndex 属性但不要在代码中分配值。使用设计器。在 Visual Studio 中,转到标有“视图”的菜单项,然后从上下文菜单中选择“Tab Order”。
  • @ByteBlast 是的,它可以工作,谢谢
  • This answer 也可能有帮助。

标签: c# winforms windows-forms-designer


【解决方案1】:

标签顺序应该这样设置。两个顶部容器面板都应分别具有 TabIndex 0 和 1,并且其子控件的父控件 Tab Index 应具有 TabIndex 前缀。 IE。如果 Panel1 的 TabIndex 为 0,则其子控件的 TabIndex 应为 0.0,0.1,0.2,0.3...

注意:确保如果任何控件的 Tab Stop 属性设置为 false,则光标不会移动到该控件中。在这种情况下,TabIndex 将不起作用。

【讨论】:

  • +1 的努力,我希望我能接受多个答案,非常感谢
  • @AgnieszkaPolec 没关系,我以为你没有从 Sahuagin 的解决方案中得到这个想法。所以,我已经用截图发布了我的答案,以便轻松理解逻辑:)
  • 对不起,因为我睡着了,所以没有评论答案
【解决方案2】:

正如其他人所说,使用TabIndex 属性来指示跳转顺序,并使用TabStop 属性来确定控件是否可以被跳转。

但是,设计师提供了一种更简单的方法来做到这一点。在设计器中查看您的表单时,请确保选择了您的表单(而不是表单上的控件)(您可以通过在表单周围的空白处单击一次来执行此操作),然后选择 View -> 标签顺序

在标签顺序设计器处于活动状态时,您将看到每个控件的TabIndexes。按您希望能够在它们之间切换的顺序单击它们。 TabIndex 工具提示将在您分配它们时从蓝色变为白色。完成后,再次选择View -> Tab Order,返回正常的设计器状态。

另一件事是建议尽可能使用UserControls。如果您使用 UserControls 的良好设计重用 UI 的某些部分,则可以避免分配有几十个制表位的表单,因为每个 UserControl 都有自己的内部跳格顺序,放置时会自动应用在表单上,​​您只需设置 TabIndex 本身的 TabIndex

【讨论】:

  • 这个Tab Order 功能让我的生活更轻松。 1000 谢谢
【解决方案3】:

当您在设计器上选择一个文本框时,您应该会看到名为 TabIndex 的文本框的属性。在控件中切换时,焦点转到具有下一个最高 TabIndex 的组件。

您需要为每个框设置 TabIndex,以便制表符按您期望的顺序在框中旋转。

【讨论】:

  • 为您的努力+1,我希望我能接受多个答案
【解决方案4】:

来自MSDN - Control.TabIndex

标签索引可以由任何大于或等于的有效整数组成 零,较低的数字在制表符顺序中较早。如果不止一个 同一父控件上的控件具有相同的选项卡索引,z 顺序 控件的数量决定了循环通过控件的顺序。

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

因此,

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

【讨论】:

  • 努力+1,但还有另一个答案对我来说更好。非常感谢
【解决方案5】:

您需要设置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 否则制表符排序不起作用,但默认情况下,当您使用 Visual Studio IDE(使用拖放功能)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;

【讨论】:

  • +1 的努力,但我还有另一个更好的答案,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多