我有一个按钮覆盖,其中有一个子标签。我将 MouseEnter 和 Leave 事件附加到按钮控件。
当鼠标进入标签时,按钮的事件将被取消(这是自然的)。我的问题是如何在不实际禁用标签的情况下禁用标签的 HitTest 。
我希望它保留其颜色,并且希望它能够更改颜色(例如按钮上的 MouseEnter),但是当鼠标位于标签上时,将在按钮上考虑 HitTest 。
P.S:我知道我可以在标签上添加鼠标进入和离开并处理这些情况,但我希望控件能够自给自足,这样如果参数在其外部发生变化(鼠标进入和离开的颜色),控制仍将正常工作。
最佳答案
在寻找其他信息时遇到这个问题,并且不相信接受的答案确实正确。
您可以扩展标签并更改 WndProc 中的命中响应。大致如下:
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 );
}
}
关于c# - WinForms 相当于 WPF 的 IsHitTestVisible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102982/