gpt4 book ai didi

c# - 如何阻止来自另一个窗体的鼠标点击事件

转载 作者:行者123 更新时间:2023-11-30 23:29:01 25 4
gpt4 key购买 nike

我有一个 winforms 单一表单应用程序,它使用我在将新 View 加载到应用程序表单时创建的“Thickbox”。
“Thickbox”在应用程序窗体前面显示另一个窗体,它是半透明的,并且具有用户控件,即框本身。

这个 thickbox 可以显示为模态对话框,在那种情况下我完全没有问题,但它也可以显示为非模态,例如,当用户在主窗体中切换 View 时,它显示 thickbox with加载动画图标。

问题是,当厚框显示为非模态时,它不会阻止用户单击应用程序主窗体的按钮。
当显示 thickbox 时什么也没有发生,但一旦它关闭,主窗体中相关按钮的点击事件处理程序就会处理点击。

我不能使用 ShowDialog,因为我不能阻塞 UI 线程,而且我需要从主窗体获得何时关闭 thickbox 的指示,
我无法设置所有者表单的 Enabled 属性 as described in this answer (虽然我已经尝试了这个解决方案的各种版本,但没有任何帮助)
我试过使用 win API 函数 BlockInput as descried in this answer ,但这并没有阻止输入,
我认为我最好的机会是使用 Application.FilterMessage方法,但我也无法阻止鼠标点击。

如果我能将鼠标点击阻塞封装在 thickbox 表单本身内,那就太好了,这样它也可以很容易地与其他应用程序一起使用,但是也非常感谢调用表单的解决方案。

最佳答案

我很高兴地宣布问题终于解决了。
在花了几天时间尝试在新应用程序中重现此错误、重新构建应用程序中的主窗体、注释掉主应用程序中的部分代码之后,通常只是全面射击以尝试找到线索,它终于打到我了。
该应用程序的行为就好像对 thickbox 的点击以某种方式排队并且仅在 thickbox 关闭时激活。今天早上,在修复了其他一些错误之后,一分钱终于掉了下来——我所缺少的只是在关闭 thickbox 表单之前的一行代码:

Application.DoEvents();

烦人的是,这对我来说不是什么新鲜事,在包括在主应用程序和 thickbox 代码本身之前我已经使用过很多次了......我想我只是不得不放手一段时间使我的头脑能够理解事后看来如此明显的痛苦......

关于c# - 如何阻止来自另一个窗体的鼠标点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35684964/

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