【问题标题】:Tabbing in a loop through a winform通过 winform 循环切换
【发布时间】:2013-07-04 04:42:56
【问题描述】:

我有一个应用程序,其中有多个表单。它是在 .NET 4.O 中构建的基于 C# Windows 窗体的应用程序。我有几种用户输入数据的表格。有显示数据的网格和表单上的大量控件。相信我!这么多控件的混乱。我必须为每个控件设置TabIndex。我已经完全禁用了某些我不想被标记的控件的TabStop 属性。但是,一旦我完成了我想要的订单,我就会对其进行 TAB,并且它可以工作,但是一旦到达最后一个框,则需要 3-4 倍的选项卡才能到达第一个字段。我尝试为我不想要的控件禁用 TabStop 属性。但我认为可能有一些我看不到的控件,但它们可能包含在 Tab 属性中。 我的问题是,有什么方法可以将winform上所有控件的TabStop属性设置为false,然后将其设置为true,用于我只想包含的控件。

我也愿意是否有任何其他方式可以实现这一点?

如果需要进一步解释,请告诉我!

我附上了一张图片,这就是我想要的顺序,然后循环回来,但不知何故它不起作用。此外,表单中还有两个面板,我已将其TabStop 属性禁用为False

【问题讨论】:

    标签: c# winforms visual-studio tabstop


    【解决方案1】:
    1. 转到View 菜单并单击Tab Order。这将激活表单上的选项卡顺序选择模式。 TabIndex 值将在每个控件上显示为一个数字。
    2. 单击控件以便您需要它们被标记。这将为控件的TabIndex 设置适当的值。
    3. 完成后,转到View 菜单并关闭Tab Order
    4. 选择您不想被标签化的控件并设置TabStop = false

    【讨论】:

    • 这正是我所做的,但是在最后一个 txtbox 之后它没有循环回第一个 txtbox?
    • @C_looksharp 对不起,没有明白你在说什么循环。在执行期间,还是在标签索引分配期间?
    • 我的意思是当你在控件之间切换时,当你到达 control#13,然后想要循环回到 control#1,如图所示。
    • @C_looksharp 是的,这是通过控件导航的默认行为
    【解决方案2】:

    一个简单的解释是,您在与它重叠的另一个控件下丢失了一个控件。或者它位于表格边缘之外。找回它的好工具是 View + Other Windows + Document Outline。

    如果这没有帮助,则通过添加标签和计时器来诊断它。像这样编写 Tick 事件处理程序:

    private void timer1_Tick(object sender, EventArgs e) {
        if (this.ActiveControl != null) label1.Text = this.ActiveControl.Name;
    }
    

    【讨论】:

      【解决方案3】:

      你应该试试下面的代码:

      foreach (Control ctrl in this.Controls) 
      ctrl.TabStop = false;
      

      您也可以尝试检查最后一个 tabindex。然后转到您的 form.designers.cs 并找到所有具有更大 tabindex 的控件,然后将其删除:添加

      ctrlTabStop = false;
      

      我没有测试任何这些,所以要小心:之前备份你的 *.designer.cs。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多