如何更改ToolTip在TreeView上的位置?

时间:2020-03-06 15:01:48  来源:igfitidea点击:

当使用工具提示显示TreeNode的详细描述时,工具提示会绘制在节点顶部,就好像它在完成节点的文本一样。另外,如果文本较长,则工具提示的位置应使文本超出屏幕。

但是我需要的是在鼠标指针下方而不是在TreeNode上方显示的工具提示。

任何想法如何做到这一点?

显示,不要告诉:

情况如何:

怎么样http://images6.theimagehosting.com/tooltip2.th.PNG

我要的:

我想如何http://images6.theimagehosting.com/tooltip3.th.PNG

解决方案

我们需要定义一个ToolTip并为TreeView编写一个MouseOverEventHandler。在MouseOverEventHandler中,计算鼠标所在的节点,然后显示说明ToolTip。另外,请确保我们不对工具提示的描述进行多次设置,否则,其行为将很丑陋。

更好的方法是在表单的左下方的StatusStrip中显示说明。

更新:

确定,因为我们已经澄清了问题。我们可以使用ToolTip.Show方法来指定坐标:

public void Show(
    string text,
    IWin32Window window,
    int x,
    int y,
    int duration
)

显然,我们必须向x和y添加偏移量。

我没有找到想要的答案,但是我以某种方式使它按我想要的方式工作。

在此之前,我试图按照以下步骤设置工具提示:

private void treeView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        TreeNode node = treeView1.GetNodeAt(e.X, e.Y);
        if (node != null)
        {
                string text = GetNodeTooltip(node);
                string currentText = toolTip1.GetToolTip(treeView1);

                if (text.Equals(currentText) == false)
                {
                    toolTip1.SetToolTip(treeView1, text);
                }
            }
            else
            {
                toolTip1.SetToolTip(tree, string.Empty);
            }
        }
        else
        {
            toolTip1.SetToolTip(tree, string.Empty);
        }
    }

现在,我只是创建treeView1.ShowNodeToolTips = true,并且在创建每个节点时,只需将其TreeNode.ToolTipText`值设置为所需文本即可。

private ToolTip toolTipController = new ToolTip() { UseFading = false,UseAnimation = false};

protected override void OnMouseMove(MouseEventArgs e)
{
    var node = GetNodeAt(e.X, e.Y);
    if (node != null)
    {
        var text = node.Text;

        if (!text.Equals(toolTipController.GetToolTip(this)))
        {
            toolTipController.Show(text, this, e.Location, 2000);
        }
    }
    else
    {
        toolTipController.RemoveAll();
    }
}