tha*_*alm 5 c# forms keyboard mono events
我的问题很简单:
我们的C#应用程序具有一个带有菜单的MainForm,以及与菜单项相关的几个键盘快捷键。
现在,我们也需要从某些子窗体中触发菜单项。但是由于在子窗体之一处于活动状态时MainForm处于非活动状态,因此快捷方式不起作用。
是否有一种简单的方法可以将所有键盘事件从子窗体传播到“所有者”窗体?还是只是一般的另一种形式?
嗯,我们不能使用一些低级的Windows东西,因为我们也需要在Mono / Linux上运行该应用程序。
编辑:我有确切的问题是使用另一种形式的相同快捷方式触发菜单项。当然,如果添加了新项目的菜单更改,则无需更新表单中的代码。
这就是为我解决的问题:
public class MainForm : Form
{
public bool ProcessCmdKeyFromChildForm(ref Message msg, Keys keyData)
{
Message messageCopy = msg;
messageCopy.HWnd = this.Handle; // We need to assign our own Handle, otherwise the message is rejected!
return ProcessCmdKey(ref messageCopy, keyData);
}
}
public class MyChildForm : Form
{
private MainForm mMainForm;
public MyChildForm(MainForm mainForm)
{
mMainForm = mainForm;
}
// This is meant to forward accelerator keys (eg. Ctrl-Z) to the MainForm
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (mMainForm.ProcessCmdKeyFromChildForm(ref msg, keyData))
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4277 次 |
最近记录: |