1

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

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

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

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

4

2 回答 2

4

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

您可以扩展标签并更改 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 ); 
    }
}
于 2012-06-15T01:47:17.283 回答
1

简短的回答是你不能。按钮和标签实际上都是窗口,所以当鼠标离开另一个时,会产生 mouseenter 和 mouseleave 事件。

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

于 2011-03-02T12:01:52.173 回答