【问题标题】:Programmatically changed TAB key issue - c# window application以编程方式更改 TAB 键问题 - c# 窗口应用程序
【发布时间】:2015-02-25 17:55:57
【问题描述】:

我已将“ENTER”键设置为 Windows 窗体中的“TAB”键。

下面是代码

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        KeyEventArgs e = new KeyEventArgs(keyData);
        if (e.KeyCode == Keys.Enter)
        {
            SendKeys.Send("{TAB}");
        }
        if (e.KeyCode == Keys.Escape)
        {
            this.Close();
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

它与所有控件完美配合,但是当我在任何组合框上按 ENTER 时,它需要两个选项卡索引。 例如。

  1. 文本框1
  2. 组合框
  3. 文本框2
  4. 文本框3
  5. 文本框4

当我按 ENTER 离开组合框时,光标(焦点)直接来到文本框 3 我希望将焦点放在组合框的下一个控件上,即文本框 2

请帮帮我

提前谢谢..!

【问题讨论】:

    标签: c# winforms combobox windows-applications


    【解决方案1】:

    发送标签后只需return true;

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            KeyEventArgs e = new KeyEventArgs(keyData);
            if (e.KeyCode == Keys.Enter)
            {
                SendKeys.Send("{TAB}");
                return true;
            }
            if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
    

    【讨论】:

      【解决方案2】:

      Control.TabIndex 属性决定了当按下 Tab 键时控件应该获得焦点的顺序。

      您应该设置控件的TabIndex 属性,按照您希望它们基于 Tab 键按下的顺序进行设置。

      也就是说,您不应该使用SendKeys.Send("{TAB}") 方法来模拟Tab 按键。为此,您应该使用Control.SelectNextControl 方法。

      【讨论】:

      • 感谢回复,能否请您解释一下如何使用 Control.SelectNextControl 方法?我是新来的。
      • @Mr.Go 您应该可以拨打this.SelectNextControl(cc.ActiveControl, true, true, true, true); 未经测试。看看这是否有效。或者看看类似的问题stackoverflow.com/questions/1087786/…
      • 嘿,还是不行,伙计。在组合框上它需要 2 个选项卡... :(
      • 您的控件中设置的TabIndex 是什么(textbox2、textbox3、...)?你检查过它们是什么吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2010-09-08
      • 2012-07-24
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多