我有一个标签作为子项的按钮覆盖。我将MouseEnter和Leave事件附加到按钮控件。
当鼠标进入标签时,按钮的事件无效(这很自然)。我的问题是如何在不实际禁用标签的情况下禁用标签的命中测试。
我希望它保留它的颜色,我希望它能够改变颜色(例如按钮上的MouseEnter),但是当鼠标悬停在标签上时,按钮上会考虑命中测试。
PS:我知道我可以在标签上添加鼠标输入和保留并处理这些情况,但我希望控件是自给自足的,这样如果参数在其外部改变(鼠标进入和离开的颜色),控制仍然可以正常运作。
答案 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 );
}
}