Windows.Form没有触发keyDown事件。

20
private void screensaverWindow_Load(object sender, System.EventArgs e)
{            
    this.BringToFront();            
    this.Focus();
    this.KeyPreview = true;
    this.KeyDown += new KeyEventHandler(onkeyDown);            
}        

onKeyDown()永远没有被调用。有任何想法为什么吗?

编辑: 这在发布模式下起作用!?我猜一定是Visual Studio调试器在某个地方干扰了。


2
加载完成后,焦点会转移到其他控件,比如文本框吗? - Iain Ward
3个回答

77

这是由于子控件拦截表单事件所致。 如果不希望出现这种情况,您需要将父表单的KeyPreview属性设置为True


这应该是被接受的答案。 - LairdPleng

16

对我来说似乎可以正常工作:

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");
}

你的表格上有任何子控件吗?


一个标签,但它也没有触发任何按键事件。 - user181351
我对这个例子也没有问题。看起来正常工作。删除页面上的其他控件,然后尝试再现。我猜想和这里的其他人一样,你可能有其他获得焦点的控件。 - Bob G

1

菜单怎么样,您是否定义了带有快捷键的菜单? 我曾经遇到过这样的问题,一个隐藏的上下文菜单实际上会吞噬某些键,并且不会将它们传递给任何表单键事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接