c# - WinForms 相当于 WPF 的 IsHitTestVisible

标签 c# wpf winforms inheritance hittest

我有一个按钮覆盖,其中有一个子标签。我将 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/

相关文章:

c# - 如何将格式为 "YYYYMM"的字符串转换为 "MMMYY"?

c# - 如何获得具有 out 参数的方法?

c# - 自定义 Linq 排序

c# - 如何将 WPF 椭圆的高度绑定(bind)到它自己的宽度?

c# - 如何允许插件通过公共(public)属性公开 WPF 或 WindowsForms 控件?

c# - 如何用C#绘制流畅的图像?

c# - 阻止用户使用最后 5 个密码?

wpf - 公共(public)与私有(private)附加属性

wpf - 使用绑定(bind)根据集合中的属性自动生成 WPF 按钮

c# - 创建一个 "file Open"对话框按钮并写入文本框