禁用应用程序的鼠标悬停效果

时间:2013-04-02 09:31:24

标签: c# winforms cursor

有没有办法为winforms应用程序的所有控件禁用鼠标悬停效果?我知道你可以通过循环遍历所有控件来实现它,但我宁愿在应用程序级别上执行它。

背景是,我想禁用整个应用程序的输入(我通过IMessageFilter完成)。用户仍然可以移动鼠标但不能单击它。这完全正常,但悬停效果比控件仍然存在。

<小时/> 修改

例如,如果将鼠标移到按钮上,则表示一旦鼠标悬停在该控件上就可以单击它

应用程序由多个可能的开放表单组成,每个表单都可以启动一个后台工作者(线程),我需要从中控制应用程序行为。所以我真的很想避免搞乱GUI线程问题。

2 个答案:

答案 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