gpt4 book ai didi

winforms - 在 KeyDown 中,ShowDialog 使 SuppressKeyPress 不起作用

转载 作者:行者123 更新时间:2023-12-02 21:31:00 37 4
gpt4 key购买 nike

在我的应用程序中,我已将键盘快捷键(事件处理程序)添加到文本框。一种是 Ctrl+H,它显示“查找和替换”弹出窗口。

在表单的 KeyDown 事件处理程序中,我检查 Ctrl+H 按键:

case Keys.H:
ShowFindReplaceDialog(true); // This line makes the SuppressKeyPress not work
e.SuppressKeyPress = true;
break;

现在,Ctrl+H 是标准键盘快捷键,相当于按退格键,因此我需要取消它。

问题是显示弹出窗口会导致抑制不起作用。因此会显示弹出窗口,关闭后我看到退格键 (Ctrl+H) 仍然可以通过。

如何才能使其发挥作用?

注意为了完整起见:您在使用 MessageBox 时遇到了同样的问题,它都是在下面的 ShowDialog 中。

最佳答案

是的,那是因为你调用了ShowDialog()。这是一个阻塞调用,因此 e.SuppressKeyPress 语句直到对话框关闭之后才会执行。 ShowDialog 会泵送 DoEvents 风格的消息循环,因此击键消息会正常分派(dispatch)并触发 KeyPress 事件。

最直接的解决方法是延迟显示对话框,直到消息处理完成。使用 Control.BeginInvoke() 优雅地完成,如下所示:

case Keys.H:
this.BeginInvoke(new Action(() => ShowFindReplaceDialog(true)));
e.SuppressKeyPress = true;
break;

关于winforms - 在 KeyDown 中,ShowDialog 使 SuppressKeyPress 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9326508/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com