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

时间:2015-12-22 20:08:06

标签: c# winforms panel keypress

我在向面板添加eventhandler时遇到了问题。

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

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

Visual Studio告诉我sender不存在。

2 个答案:

答案 0 :(得分:1)

您的问题超出了错误的语法并选择了错误的,不受支持的事件..:

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

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

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

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

答案 1 :(得分:0)

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

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

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

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