【问题标题】:The KeyDown event of a Simple style combo box is raised two timesSimple 样式组合框的 KeyDown 事件被引发两次
【发布时间】:2013-04-22 14:01:30
【问题描述】:

我有一个带有选项卡和组合框控件的简单 win 表单应用程序。

  • 组合框控件的样式为“简单”。
  • 选项卡控件有按键事件。

当我按下组合控件上的 Enter 键时,它会触发 TWO 按键事件。如果您将组合样式更改为任何其他样式,则按键事件只会触发我所期望的一个。

有没有人知道为什么我会为单次输入按键获得两个按键事件? 我在 Microsoft 网站上发现了类似的问题,但与 .NET 1.0 有关。

http://support.microsoft.com/kb/814970

【问题讨论】:

    标签: winforms combobox keydown


    【解决方案1】:

    这可能与具有 Simple DropDown 样式的预定义行为的 Enter 键有关。

    您可以在 KeyDown 事件中尝试这种解决方法:

    void comboBox1_KeyDown(object sender, KeyEventArgs e) {
      e.SuppressKeyPress = true;
      // do stuff
    }
    

    您可以猜到,KeyPress 事件现在不会触发。

    如果您仍需要处理 KeyPress 事件中的内容,您可以尝试以下解决方法:

    void comboBox1_KeyPress(object sender, KeyPressEventArgs e) {
      if (e.KeyChar == (char)Keys.Enter) {
        e.Handled = true;
      } else {
        // do stuff
      }
    }
    

    【讨论】:

    • 非常感谢您的回答。我明天会试一试。只是想知道它是否是 .net 错误?
    【解决方案2】:

    Combobox 中的KeyPress 只接受“char”键。为了您的目的,请为组合框和 e.Handled 属性使用 KeyDown 事件。

    然后你的代码就可以工作了,看起来像:

    private void comboBox2_KeyDown(object sender, KeyEventArgs e)
            {
    
                if (e.KeyCode == Keys.Enter)
                {
                    comboBox2.KeyDown += new KeyEventHandler(comboBox2_SelectionChangeCommitted);
                }
    
                if (e.KeyCode != Keys.Enter)
                {
    
                    e.Handled = false;
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多