Winforms 工具提示窃取鼠标单击

Winforms 工具提示窃取鼠标单击,winforms,tooltip,Winforms,Tooltip,我正在从ScrollableControl编写自定义树视图。我决定在鼠标悬停在文本太长而无法显示的节点上时显示工具提示 我发现当显示工具提示时,用户无法单击节点来选择它,因为(我认为)他单击的是工具提示窗口,而不是我的控件 有什么简单的解决办法吗?据我所知,System.Windows.Forms.TreeView没有这个问题。谢谢 您需要覆盖工具提示表单中的WndProc,并返回HT\u TRANSPARENT以响应消息 例如: protected override void DefWndPr

我正在从ScrollableControl编写自定义树视图。我决定在鼠标悬停在文本太长而无法显示的节点上时显示工具提示

我发现当显示工具提示时,用户无法单击节点来选择它,因为(我认为)他单击的是工具提示窗口,而不是我的控件


有什么简单的解决办法吗?据我所知,System.Windows.Forms.TreeView没有这个问题。谢谢

您需要覆盖工具提示表单中的
WndProc
,并返回
HT\u TRANSPARENT
以响应消息

例如:

protected override void DefWndProc(ref Message m) {
    switch (m.Msg) {
        case 0x84://WM_NCHITTTEST
            m.Result = new IntPtr(-1);  //HT_TRANSPARENT
            return;
    }
    base.DefWndProc(ref m);
}

这将使Windows相信您的from对鼠标不可见,从而导致任何鼠标事件都被传递到它下面的窗口。(但仅当两个窗口来自同一进程时)

您需要覆盖工具提示表单中的
WndProc
,并返回
HT\u TRANSPARENT
以响应消息

例如:

protected override void DefWndProc(ref Message m) {
    switch (m.Msg) {
        case 0x84://WM_NCHITTTEST
            m.Result = new IntPtr(-1);  //HT_TRANSPARENT
            return;
    }
    base.DefWndProc(ref m);
}

这将使Windows相信您的from对鼠标不可见,从而导致任何鼠标事件都被传递到它下面的窗口。(但仅当两个窗口来自同一进程时)

我正在使用System.windows.Forms.Tooltip类显示工具提示,似乎无法覆盖工具提示窗口的wndproc。我设法将自己的窗体用作工具提示窗口。你的答案,并帮助了很多。如果你使用
工具提示
类,你根本不应该有这个问题。在走上艰难的道路之前,我已经尝试过了,但是工具提示类有它自己的问题。我使用System.Windows.Forms.Tooltip类来显示工具提示,似乎我无法覆盖工具提示窗口的wndproc。我设法使用自己的窗体作为工具提示窗口。你的答案,并帮助了很多。如果你使用
工具提示
类,你根本不应该有这个问题。在走上艰难的道路之前,我已经尝试过了,但是工具提示类有它自己的问题。