将 KeyPress 事件添加到表单主面板的问题

Issue with adding KeyPress event to main panel in form

我在向面板添加事件处理程序时遇到问题。

我已经在堆栈中检查了这里的答案,但是它们对我不起作用。

Panel panel_glowny = new Panel();
panel_glowny.KeyPress += new KeyPressEventHandler(object sender,KeyEventArgs e)

Visual Studio 告诉我 sender 不存在。

按键事件处理程序需要是接受这些参数的方法 对于像你这样的内联版本有这样的东西

Panel panel_glowny = new Panel();
panel_glowny.KeyPress += new KeyPressEventHandler((sender, e) => { ... })

您还可以删除新的 KeyPressEventHandler 语句并将其缩短为类似这样的内容

Panel panel_glowny = new Panel();
panel_glowny.KeyPress += (sender, e) => { ... };

你的问题不仅仅是错误的语法和选择了错误的、不受支持的事件..:[=​​15=]

A Panel 不接收按键甚至焦点。这就是 Intellisense 不支持 KeyPress 处理程序的原因。您可以添加它,但它不起作用。

所以你需要表单的帮助并且需要在代码中将焦点设置到面板..

我们需要设置表单的 KeyPreview 属性 以便它捕获所有按键;并且您还需要将焦点设置到面板 每次 您希望它接收这些按键。确保不要再次将 Focus 移开..!

panel_glowny.PreviewKeyDown += panel_glowny_PreviewKeyDown;  // necessary once
KeyPreview = true;                                        // necessary once
panel_glowny.Focus();                                  // may be necessary more than once!!

void panel_glowny_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    throw new NotImplementedException();
}