【问题标题】:Skipping KeyDown On Override ProcessCmdKey EventHandller在覆盖 ProcessCmdKey EventHandler 时跳过 KeyDown
【发布时间】:2013-01-19 20:47:37
【问题描述】:

我通过按下向下箭头键在文本框上有一个简单的增量,如下所示。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{

     if (keyData == Keys.Down)
     {

           int c = int.Parse(textBox1.Text);
           c++;
           textBox1.Text = c.ToString();


     }
 }

以上方法适用于按双下箭头键而不是单按下箭头键。

注意:以上代码在 UserControl 上。我已经在表单 keydown EventHandler 上的简单 winform 应用程序上进行了尝试,同样可以正常工作。

如何克服?

【问题讨论】:

  • 你是什么意思“同样工作正常”?我很好奇,因为您说您使用了文本框的 KeyDown 处理程序,这是正确使用的方法。
  • 该方法返回一个布尔值。如果您使用了密钥,则返回 true。
  • @HansPassant,是的,你绝对是对的,我同意你只需要返回 bool 的值,因为它是 bool 方法。

标签: c# winforms visual-studio


【解决方案1】:

您需要处理之前存在的其他命令,并在处理您正在查找的命令时返回。尝试将其更改为此,看看是否有帮助:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
   if (msg.WParam.ToInt32() == (int)Keys.Down)
   {
      int c = int.Parse(textBox1.Text);
      c++;
      textBox1.Text = c.ToString();
      return true;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}

【讨论】:

  • 是的,你的窍门是行得通的,我也同意 HansPassant 先生的观点,即只需要在使用密钥时返回 true,因为上述方法返回 bool。
  • @MaheshWagh - 很高兴我能提供帮助,如果您正在寻找答案,请不要忘记接受
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多