如何阻止来自另一个窗体的鼠标点击事件
How to block mouse click events from another form
我有一个 winforms 单一表单应用程序,它使用 "Thickbox" 我在每次将新视图加载到应用程序表单中时创建的。
"Thickbox" 在应用程序窗体前面显示另一个窗体,该窗体是半透明的,并且有一个用户控件,即框本身。
这个thickbox可以显示为模态对话框,在那种情况下我完全没有问题,但它也可以显示为非模态,例如,当用户在主窗体中切换视图时,它显示带加载动画图标的 thickbox。
问题是当 thickbox 显示为非模态时,它不会阻止用户单击应用程序主窗体的按钮。
当显示 thickbox 时什么也没有发生,但是一旦关闭,主窗体中相关按钮的点击事件处理程序就会处理点击。
我不能使用ShowDialog
,因为我不能阻塞UI线程,我需要从主窗体得到关闭thickbox的指示,
我无法设置所有者表单 as described in this answer 的 Enabled
属性(虽然我已经尝试了此解决方案的各种版本,但没有任何帮助)
我试过使用 win API 函数 BlockInput
as descried in this answer,但没有阻止输入,
我认为我最好的机会是使用 Application.FilterMessage
方法,但我也无法用它来阻止鼠标点击。
如果我能将鼠标点击阻塞封装在 thickbox 表单本身内就好了,这样它也可以很容易地与其他应用程序一起使用,但是
也非常感谢调用表单的解决方案。
很高兴地宣布问题终于解决了。
在花了几天时间尝试在新应用程序中重现此错误、重新构建应用程序中的主窗体、注释掉主应用程序中的部分代码之后,通常只是全面射击以尝试找到线索,它终于打到我了
该应用程序的行为就好像对 thickbox 的点击以某种方式排队并且仅在 thickbox 关闭时激活。今天早上,在修复了其他一些错误之后,一分钱终于掉了——我所缺少的只是在关闭 thickbox 表单之前的一行代码:
Application.DoEvents();
烦人的是,这对我来说不是什么新鲜事,在包括在主应用程序和 thickbox 代码本身之前我已经使用过很多次了……我想我只是不得不放弃一段时间让我的头脑理解事后看来如此明显的痛苦......
我有一个 winforms 单一表单应用程序,它使用 "Thickbox" 我在每次将新视图加载到应用程序表单中时创建的。
"Thickbox" 在应用程序窗体前面显示另一个窗体,该窗体是半透明的,并且有一个用户控件,即框本身。
这个thickbox可以显示为模态对话框,在那种情况下我完全没有问题,但它也可以显示为非模态,例如,当用户在主窗体中切换视图时,它显示带加载动画图标的 thickbox。
问题是当 thickbox 显示为非模态时,它不会阻止用户单击应用程序主窗体的按钮。
当显示 thickbox 时什么也没有发生,但是一旦关闭,主窗体中相关按钮的点击事件处理程序就会处理点击。
我不能使用ShowDialog
,因为我不能阻塞UI线程,我需要从主窗体得到关闭thickbox的指示,
我无法设置所有者表单 as described in this answer 的 Enabled
属性(虽然我已经尝试了此解决方案的各种版本,但没有任何帮助)
我试过使用 win API 函数 BlockInput
as descried in this answer,但没有阻止输入,
我认为我最好的机会是使用 Application.FilterMessage
方法,但我也无法用它来阻止鼠标点击。
如果我能将鼠标点击阻塞封装在 thickbox 表单本身内就好了,这样它也可以很容易地与其他应用程序一起使用,但是 也非常感谢调用表单的解决方案。
很高兴地宣布问题终于解决了。
在花了几天时间尝试在新应用程序中重现此错误、重新构建应用程序中的主窗体、注释掉主应用程序中的部分代码之后,通常只是全面射击以尝试找到线索,它终于打到我了
该应用程序的行为就好像对 thickbox 的点击以某种方式排队并且仅在 thickbox 关闭时激活。今天早上,在修复了其他一些错误之后,一分钱终于掉了——我所缺少的只是在关闭 thickbox 表单之前的一行代码:
Application.DoEvents();
烦人的是,这对我来说不是什么新鲜事,在包括在主应用程序和 thickbox 代码本身之前我已经使用过很多次了……我想我只是不得不放弃一段时间让我的头脑理解事后看来如此明显的痛苦......