【问题标题】:Control that gets a tab stop twice获得两次制表位的控件
【发布时间】:2009-06-03 14:32:01
【问题描述】:

在标准的 WinForms 应用程序中,是否有可能出现以下情况以及我将如何做到这一点:

具有四个文本框控件的表单,在表单上从上到下排列:

  • 文本框1
  • 文本框2
  • 文本框3
  • 文本框4

所需的行为是,当表单加载时,焦点位于 TextBox3 上,但在跳出时,焦点转到顶部并正常通过所有控件,方式如下:

  1. TextBox3
  2. 文本框1
  3. 文本框2
  4. TextBox3
  5. 文本框4

【问题讨论】:

    标签: .net winforms


    【解决方案1】:

    这将是您需要编写的代码,并且需要正确使用事件。根据需要设置标签顺序,然后编写以下代码:

    private bool OnLoad = True;
    
    Form_OnLoad(...) {
        TextBox3.SetFocus();
    }
    
    TextBox3_LostFocus(...) {
        if (OnLoad) {
            TextBox1.SetFocus();
            OnLoad = false;
        } // The else falls through to the default tab order
     }
    

    【讨论】:

    • 我在想这是要走的路,“这是第一次吗?”标记,但我想尽可能避免它。
    • @krolley - 我怀疑有办法避免“第一次”标志,它可能会比操作 TabIndexes 更清晰、更容易理解
    【解决方案2】:

    LFSR 是对的:

    您必须在 textBox3 LostFocus 事件上编码,这是一个 VB 示例

    static notFirstTime as boolean
    if notFirstTime then exit sub
    textbox1.setFocus
    notfirstTime=true
    

    【讨论】:

      【解决方案3】:

      简短的回答:绝对!

      表单上的布局与 Tab 顺序无关。您只需通过设置 TabIndex 属性即可指定选项卡遍历和起点。启动控件应为 0,下一个为 1,依此类推。此外,TabStop 属性可以方便地指定哪些控件可以通过 Tab 键访问。

      【讨论】:

        【解决方案4】:

        您也许可以使用 TabIndex 属性的以下配置来欺骗它进行购买。

        • 文本框 3 的标签 = 1
        • 文本框1 = 2
        • 文本框2 = 3
        • 文本框3 = 4
        • TextBox4 = 5

        您必须将标签设置为 TabStop="True"。但我认为这可能有效。请记住,我对此不是 100% 确定...

        【讨论】:

        • 这是一个人为的例子,但不幸的是文本框没有标签。
        【解决方案5】:

        在您的构造函数(或设计器)中 像这样(或类似的东西)设置表索引。

        this.textBox1.TabIndex = 1;
        this.textBox2.TabIndex = 2;
        this.textBox3.TabIndex = 0;
        this.textBox4.TabIndex = 4;
        

        然后设置一个事件将文本框 3 的 tabIndex 设置为新值:

        private void textBox3_Leave(object sender, EventArgs e)
        {
            textBox3.TabIndex = 3;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-19
          • 2018-05-24
          • 2014-11-05
          • 2013-09-27
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          • 1970-01-01
          相关资源
          最近更新 更多