[英]Disable mouse hover effect for application
有沒有一種方法可以禁用Winforms應用程序的所有控件的鼠標懸停效果? 我知道您可以通過遍歷所有控件來做到這一點,但是我寧願在應用程序級別上做到這一點。
背景是,我想禁用整個應用程序的輸入(這是通過IMessageFilter
)。 用戶仍應能夠移動鼠標但不能單擊它。 這可以很好地工作,但是對控件的懸停效果仍然存在。
例如,如果將鼠標移到按鈕上,則表示一旦鼠標移到該控件上就可以單擊它。
該應用程序由多種可能的打開形式組成,每種形式都可以啟動一個背景工作人員(線程),我需要從中控制應用程序的行為。 因此,我非常想避免與GUI線程問題混淆。
您可以從創建自己的按鈕類開始,然后覆蓋MouseEnter事件:
protected override void OnMouseEnter(EventArgs e)
{
if (shouldBeEnabled)
{
base.OnMouseEnter(e);
}
}
在我看來,您只是想禁用頂層窗口。 這將解決您所有的問題, IMessageFilter
需要IMessageFilter
代碼。 您最終得到的代碼量很少。
您需要p /從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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.