有没有办法为winforms应用程序的所有控件禁用鼠标悬停效果?我知道你可以通过循环遍历所有控件来实现它,但我宁愿在应用程序级别上执行它。
背景是,我想禁用整个应用程序的输入(我通过IMessageFilter
完成)。用户仍然可以移动鼠标但不能单击它。这完全正常,但悬停效果比控件仍然存在。
<小时/> 修改
例如,如果将鼠标移到按钮上,则表示一旦鼠标悬停在该控件上就可以单击它
应用程序由多个可能的开放表单组成,每个表单都可以启动一个后台工作者(线程),我需要从中控制应用程序行为。所以我真的很想避免搞乱GUI线程问题。
答案 0 :(得分:0)
您可以从创建自己的按钮类开始,并覆盖MouseEnter事件:
protected override void OnMouseEnter(EventArgs e)
{
if (shouldBeEnabled)
{
base.OnMouseEnter(e);
}
}
答案 1 :(得分:0)
在我看来,您只想禁用顶级窗口。这将解决您的所有问题,无需使用IMessageFilter
代码。你最终得到了极少量的代码。
您需要从user32:
调用EnableWindow
API调用
[DllImport("user32.dll")]
static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
然后,您可以像这样控制表单的可用性:
EnableWindow(MyForm.Handle, false); // disable form
EnableWindow(MyForm.Handle, true); // enable form