我正在编写一个源自的自定义控件System.Windows.Forms.Control
.
该控件正在使用Control.KeyDown
事件,观察击键:我应该处理一些击键(例如<Ctrl>-K
)作为热键,这使我启动一个对话框。
如果我从我的onKeyDown
事件处理程序,在我设置之前显示对话框KeyEventArgs.SuppressKeyPress
to true
并返回(所以我无法抑制K
按键)。相反,我想从onKeyDown
事件处理程序,然后启动对话框。为此,我从onKeyDown
事件处理程序我需要以某种方式再次调用,使用某种“启动对话框”事件。
在 Win32 上,我可以使用以下命令生成此事件PostMessage
API,向自己发送已注册的窗口消息:我将在消息队列中的任何先前消息之后立即收到此消息,并将其用作启动对话框的信号。但在这里我不能使用PostMessage
函数(也不是WndProc
方法)因为我想严格使用managedAPI(无需SecurityPermissionFlag::UnmanagedCode
).
那么,对于一个线程(我的 UI 线程)来说,调度异步回调的托管等效项是什么:也许是某种计时器?某种自我Invoke
?
我的第一个想法是“设置 SurpressKeyPress 属性before打开对话框”,但这并不能真正回答您的问题。如果您确实需要在打开对话框之前从事件处理程序返回,请查看 BeginInvoke 方法。
你可以这样做:
...
this.BeginInvoke(new InvokeDelegate(showDlg));
KeyEventArgs.SuppressKeyPress = true;
...
public void showDlg()
{
// create and show dialog here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)