将 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();
}
我在向面板添加事件处理程序时遇到问题。
我已经在堆栈中检查了这里的答案,但是它们对我不起作用。
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();
}