WinForms相当于WPF的IsHitTestVisible

我有一个按钮覆盖,有一个标签作为孩子。 我将MouseEnter和Leave事件附加到按钮控件。

当鼠标进入标签时,按钮的事件无效(这很自然)。 我的问题是如何在不实际禁用标签的情况下禁用标签的命中测试。

我希望它保留它的颜色,我希望它能够改变颜色(例如按钮上的MouseEnter),但是当鼠标hover在标签上时,按钮上将考虑命中测试。

PS:我知道我可以在标签上添加鼠标输入和离开并处理这些情况,但我希望控件是自给自足的,这样如果参数在它之外变化(鼠标进入和离开的颜色),控件仍将是function正常。

在寻找其他信息的同时解决这个问题,并且不相信接受的答案是真的正确。

您可以扩展标签并更改WndProc中的hittest响应。 这些方面的东西:

public class HTTransparentLabel : Label { private const int WM_NCHITTEST = 0x84; private const int HTTRANSPARENT = -1; protected override void WndProc(ref Message message) { if ( message.Msg == (int)WM_NCHITTEST ) message.Result = (IntPtr)HTTRANSPARENT; else base.WndProc( ref message ); } } 

简短的回答是,你做不到。 按钮和标签实际上都是窗口,因此当鼠标为另一个留下时,会生成mouseenter和mouseleave事件。

真正的问题是,为什么你需要一个按钮上的标签?