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

时间:2008-10-02 14:41:10

标签: c# .net winforms treeview tooltip

使用工具提示显示TreeNode的详细说明时,工具提示会在节点顶部绘制,就好像它正在完成节点的文本一样。此外,如果文本很长,则工具提示的位置使文本超出屏幕

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

知道怎么做吗?


显示,不要告诉:

它是怎么回事:

how it is http://images6.theimagehosting.com/tooltip2.th.PNG

我想要的:

how I want http://images6.theimagehosting.com/tooltip3.th.PNG

3 个答案:

答案 0 :(得分:8)

我找不到我想要的答案,但我以某种方式让它按照我想要的方式工作。

之前,我试图按如下方式设置工具提示:

    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值设置为所需的文本。

答案 1 :(得分:3)

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();
    }
}

答案 2 :(得分:2)

您需要定义ToolTip并为TreeView编写MouseOverEventHandler。在MouseOverEventHandler中计算鼠标所在的节点,然后显示描述工具提示。另外,请确保您没有多次设置工具提示说明,否则行为非常难看。

更好的方法是在StatusStrip中显示描述 - 表单的左下角。

<强>更新

好的,因为你澄清了你的问题。您可以使用ToolTip.Show方法指定坐标:

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

显然,你必须为x和y添加偏移量。