WinForms相当于WPF的IsHitTestVisible

时间:2011-02-24 09:54:36

标签: c# wpf winforms inheritance hittest

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

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

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

PS:我知道我可以在标签上添加鼠标输入和保留并处理这些情况,但我希望控件是自给自足的,这样如果参数在其外部改变(鼠标进入和离开的颜色),控制仍然可以正常运作。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

您可以扩展标签并更改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 ); 
    }
}