【问题标题】:Create a Cross-Container Tab Index创建跨容器标签索引
【发布时间】:2011-03-01 14:08:46
【问题描述】:

我面临一个似乎无法解决的小问题。 问题出在 WinForm 中,我有几个容器(TabControls、Panels、...)。

控件中的 Tab 顺序可以正常工作(当然)。但是现在客户要求更改 taborder 以从第一个容器中的文本框(当前 tabindex 0,0,1)跳转到另一个容器中的控件(当前 tabindex 0,1,0,1)。

我的第一种方法是将第二个的 tabindex 设置为 0,0,1,1 但没有效果。选项卡从 0,0,1 跳转到 0,0,2。

我也尝试了其他几种组合,但没有结果。

谁能提供我如何解决这个问题的提示?

PS:0,0,0 代表包含控件的容器,以防万一不清楚

【问题讨论】:

    标签: c# .net winforms visual-studio-2010


    【解决方案1】:

    您可以使用该控件的Leave event,并在后面的代码中手动设置焦点来执行此操作。

    private void textBox1_Leave(object sender, System.EventArgs e)
    {
        textBox2.Focus();
    }
    

    【讨论】:

    • 简单但有效。非常感谢
    • 你可以稍微清理一下,如果按下“TAB”键,则只转到下一个文本框。
    【解决方案2】:

    如果要使用TAB键,最好不要使用Leave event 例如,如果您使用鼠标进行更改,它将创建一些错误的重定向。

    更好地覆盖ProcessCmdKey

    这是一个很好的解决方案:

     protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                bool baseResult = base.ProcessCmdKey(ref msg, keyData);
    
                //if key is tab and TextBox1 is focused then jump to TextBox2
                if (keyData == Keys.Tab && TextBox1.Focused)
                {
                    TextBox2.Focus();
                    return true;
                }
                else if (keyData == Keys.Tab && TexBox2.Focused)
                {
                    TextBox3.Focus();
                    return true;
                }
                    return baseResult;
            }
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2012-08-15
      相关资源
      最近更新 更多