【问题标题】:Windows.Form not fire keyDown eventWindows.Form 不触发 keyDown 事件
【发布时间】:2010-07-26 12:54:03
【问题描述】:
private void screensaverWindow_Load(object sender, System.EventArgs e)
{            
    this.BringToFront();            
    this.Focus();
    this.KeyPreview = true;
    this.KeyDown += new KeyEventHandler(onkeyDown);            
}        

onKeyDown() 永远不会被调用。知道为什么吗?

编辑: 这在发布模式下有效!?我想一定是 Visual Studio 调试器在某处干扰

【问题讨论】:

  • 加载完成后,焦点是否转到另一个控件,如文本框?

标签: c# winforms input


【解决方案1】:

这是由于窗体上的子控件拦截事件造成的。 如果不希望这样,您需要将父表单的 KeyPreview 属性设置为 True

【讨论】:

  • 这应该是公认的答案
【解决方案2】:

似乎对我有用:

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    this.BringToFront();
    this.Focus();
    this.KeyPreview = true;
    this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}

void Form1_KeyDown(object sender, KeyEventArgs e)
{
    Console.WriteLine("test");
}

您的表单上是否有任何子控件?

【讨论】:

  • 一个标签,但也不会触发任何关键事件。
  • 这个例子我也没有问题。似乎按预期工作。丢失页面上的其他控件,然后尝试重现。我的猜测与这里的其他人类似,您可能还有其他一些具有焦点的控件。
【解决方案3】:

菜单怎么样,你有定义快捷键的菜单吗? 我遇到了一个问题,隐藏的上下文菜单实际上正在吞下某些键,而不是将它们传递给任何表单键事件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多