+1  A: 

You need to define a ToolTip and write an MouseOverEventHandler for the TreeView. In the MouseOverEventHandler calculate the node above which mouse is positioned, then show the description ToolTip. Also make sure you are not setting the tooltip description more than once, otherwise the behavior is quite ugly.

A better way is to show the description in the StatusStrip - bottom left of the Form.

Update:

OK since you have clarified your question. You can use ToolTip.Show method where you can specify coordinates:

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

Obviously, you'll have to add offset to x and y.

Vivek
Not really what I want. Actually I already do this (setting the tooltip text on MonseMove for each node).What I need is to prevent the tooltip form showing on top of the node, as if it was completing the node's text.
Jonas
+4  A: 

I didn't find the answer I was looking for, but I somehow made it work the way I wanted.

Before, I was trying to set up the tooltip as follows:

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

Now, I just make treeView1.ShowNodeToolTips=true and when I create every node, I just set its TreeNode.ToolTipText value with the desired text.

Jonas
A: 

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