【问题标题】:How to detect tab key pressing in C#?如何检测 C# 中的 Tab 键按下?
【发布时间】:2011-02-26 15:34:14
【问题描述】:

我想检测何时在 textBox 中按下 tab 键并聚焦面板中的下一个文本框。

我已经尝试过 keyPressed 方法和 keyDown 方法。但是当我运行程序并调试时,按下 tab 键时这些方法不会调用。 这是我的代码。

private void textBoxName_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        textBoxUsername.Focus();
    }
}

private void textBoxName_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar==(char)Keys.Tab)
    {
        textBoxUsername.Focus();
    }
}

请指正。谢谢。

【问题讨论】:

标签: c# tabs key keypress


【解决方案1】:

如果您正在处理面板内的文本框,设置正确的选项卡索引应该可以完美地完成这项工作。但是,如果您正在处理来自其他面板的其他文本框,请说:

panel1 有 textbox1

panel2 有 textbox2

panel3 有 textbox3

这是你需要做的:

  1. 设置所有文本框的TabStop = Falseproperty。默认情况下,这设置为 True。

  2. 为每个面板设置正确的TabIndex,例如

    panel1 TabIndex = 0; panel2 TabIndex = 1; panel3 TabIndex = 2;

  3. 那就试试这段代码

    private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode.Equals(Keys.Tab)) this.textBox3.Focus(); }

【讨论】:

    【解决方案2】:

    转到文本框的属性并分配正确的tabindex顺序

    【讨论】:

    • 这个答案没有回答 OP 的要求。这是我们必须回答他们的问题或什么更好的情况之一。
    【解决方案3】:

    您可以尝试覆盖ProcessCmdKey method like this

    【讨论】:

      【解决方案4】:

      如果 textBoxName 在按下 TAB 键时具有焦点,则仅触发“KeyDown”事件。 您只需要设置正确的 Tab 键顺序。

      【讨论】:

        【解决方案5】:

        您想要“离开”事件。我只是把它扔到默认的 C# WinForms 应用程序中:

        namespace WindowsFormsApplication1
        {
            public partial class Form1 : Form
            {
                /* 
                      ... misc housekeeping ... 
                */
        
                private void OnLeave(object sender, EventArgs e)
                {
                    lblMsg.Text = "left field 1";
                }
        
                private void OnLeave2(object sender, EventArgs e)
                {
                    lblMsg.Text = "left field 2";
                }
            }
        }
        

        它可以按您的预期工作。显然,您可以在 Leave() 处理程序中做任何您想做的事情,包括将焦点强制到其他地方,但请注意不要混淆用户...

        【讨论】:

          【解决方案6】:

          您应该改用 tabOrder。

          【讨论】:

            【解决方案7】:

            您为什么需要这种复杂性? WinForms 会自动为您完成。您只需要设置正确的 Tab 键顺序。

            【讨论】:

            • 如何设置正确的标签顺序?它会自动按错误的顺序排列,这就是我想手动执行的原因。
            • 使用控件的 TabIndex 属性。您可以通过编程方式进行设置,也可以在设计器中使用 View -> Tab Order。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-24
            • 1970-01-01
            • 2013-08-25
            • 2022-11-17
            • 1970-01-01
            相关资源
            最近更新 更多