【问题标题】:Why KeyDown event doesn't catch "Control" downs?为什么 KeyDown 事件不会捕获“控制”下降?
【发布时间】:2014-06-05 10:54:20
【问题描述】:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
            this.Text = "up";
            break;

        case Keys.Down:
            this.Text = "down";
            break;

        case Keys.Left:
            this.Text = "<-";
            break;

        case Keys.Right:
            this.Text = "->";
            break;

        case Keys.Delete:
            this.Text = "delete";
            break;

        case Keys.Control:
            this.Text = "control";
            break;

        case Keys.Control | Keys.C:
            this.Text = "control + c";
            break;

        case Keys.Control | Keys.X:
            this.Text = "control + x";
            break;

        case Keys.Control | Keys.V:
            this.Text = "control + v";
            break;

        default:
            break;
    }
}

与持有 Control 相关的所有内容都不会显示在表单标题中... 这只是代码示例,而不是真正的项目。在实际项目中,我需要捕捉 Control + C / X / V 按下来进行复制/粘贴操作。

【问题讨论】:

  • 您只是在测试错误的密钥。如果您想查看 Ctrl 键本身,而不仅仅是修饰符,那么您必须测试 Keys.ControlKey。没有意义。

标签: c# .net winforms controls keydown


【解决方案1】:

试试这个解决方案:

case (e.Control && e.KeyCode == Keys.C)

编辑: 如果它不起作用,请在您的代码周围添加括号:

case (Keys.Control | Keys.C):

编辑 2: 还有这个:

e.KeyData == (Keys.Control | Keys.V)

编辑 3: 开启 KeyData

switch (keyData) {
   // Control+ C
   case Keys.Control | Keys.C:
      // ...
      break;
   case Keys.Control | Keys.V:
      // ...
      break;
}

【讨论】:

  • 对不起,你自己测试过你的例子的编译能力吗?评论中的那个和这个是不可编译的。 Cannot implicitly convert type 'bool' to 'System.Windows.Forms.Keys'(Keys.Control | Keys.C) 的结果与我的原始代码相同。
  • 我的第一个解决方案是正常编译如果你使用KeyDown事件第二个,我认为括号的缺失是原因
  • 你在用winforms吗?
  • 这可行,但很奇怪。它仍然没有捕获case Keys.Control:
  • 捕捉,我认为你可以覆盖这个:protected override bool ProcessCmdKey (ref Message msg, Keys keyData) { switch ( keyData ) { case Keys.F4 | Keys.Control: // Do something } }你在这里有另一个解决方案:-D:http://stackoverflow.com/questions/1646998/up-down-left-and-right-arrow-keys-do-not-trigger-keydown-event
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多