如何阻止来自其他表单的鼠标单击事件

时间:2016-02-28 16:16:50

标签: c# winforms mouseclick-event

我有一个winforms单一表单应用程序,它使用" Thickbox"每当将新视图加载到申请表中时,我就会创建 " Thickbox"在应用程序的表单前面显示另一种形式,它是半透明的,并且具有用户控件,即框本身。

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

问题是当厚箱显示为非模态时,它不会阻止用户点击应用程序主窗体的按钮。
当显示thickbox时没有任何反应,但一旦关闭,主要表单中相关按钮的click事件处理程序就会处理点击。

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

如果我可以将鼠标单击阻塞封装在thickbox表单本身内,那将是很好的,因此它也可以很容易地与其他应用程序一起使用,但是 对调用表单的解决方案也将非常受欢迎。

1 个答案:

答案 0 :(得分:2)

我很高兴地宣布问题终于得到解决 尝试在新应用程序中重新创建此错误几天后,重新构建应用程序中的主窗体,在主应用程序中注释掉部分代码,并且通常只是在全部拍摄以尝试找到导致,它终于打了我 该应用程序的行为就好像厚箱上的点击以某种方式排队,只有在关闭厚箱时才会激活。今天早上,在修复了一些其他错误之后,便士终于放弃了 - 在关闭厚箱形式之前,我所遗漏的只是一行代码:

Application.DoEvents();

令人烦恼的是,这对我来说不是什么新东西,我在使用它之前已经多次使用它包括在主应用程序和厚箱代码本身......我想我只是不得不放弃一段时间让我的头脑能够理解后见之明显而易见的事情......