我正在写一个从System.Windows.Forms.Control派生自定义控件。
该控件使用Control.KeyDown事件来观察击键:我应该处理一些击键(例如<Ctrl>-K )作为热键,这使我启动一个对话框。
如果我从我的onKeyDown事件处理程序启动对话框,则在将KeyEventArgs.SuppressKeyPress设置为true并返回(因此我无法抑制K按键)之前,会显示该对话框。 相反,我想从onKeyDown事件处理程序返回,然后启动对话框。 要做到这一点,我从onKeyDown事件处理程序返回后,我需要以某种方式再次调用,与某种“启动对话”事件。
在Win32上,我可以使用PostMessage API生成这个事件,向我自己发送一个注册的窗口消息:我将在消息队列中的任何先前消息之后立即收到此消息,并将其用作启动对话框的信号。 但是在这里,我不能使用PostMessage函数(也不是WndProc方法),因为我想使用严格pipe理的 API(不需要SecurityPermissionFlag::UnmanagedCode )。
为什么这个Cancellationdisposable永远不会取消Observable.dispose()?
使用Windows传真服务器扩展发送传真 – faxcomexlib
.Net中的asynchronous文件IO
validationWindows通过智能卡login
HTTP状态:在.net浏览器控件中的12002
那么对于一个线程(我的用户界面线程)来说,pipe理的等价物是什么,来安排一个asynchronouscallback:或许是某种types的定时器? 某种自我Invoke ?
在C#中我的程序注销部分错误,我可以得到一些帮助吗?
在Windows远程服务器中运行一个命令,并以C#.NET取回控制台输出
用C#重命名捕获设备,有可能吗?
ASP.NET核心RC2作为linux deamon
我的第一个想法是“打开对话框之前设置SurpressKeyPress属性”,但这不是真的回答你的问题。 如果您确实需要在打开对话框之前从事件处理程序返回,请查看BeginInvoke方法。
你可以做这样的事情:
... this.BeginInvoke(new InvokeDelegate(showDlg)); KeyEventArgs.SuppressKeyPress = true; ... public void showDlg() { // create and show dialog here }
你可以从你的表单中定义的方法启动对话框,并从一个新的线程(在using语句中包含System.Threading)启动该方法。 按钮点击事件中的代码将如下所示:
Thread thread = new Thread(new ThreadStart(launchdialog)); thread.Start();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。