Как изменить положение всплывающей подсказки на TreeView? - PullRequest
3 голосов
/ 02 октября 2008

При использовании всплывающих подсказок для отображения подробного описания TreeNode всплывающая подсказка рисуется в верхней части узла, как если бы она заканчивала текст узла. Кроме того, если текст длинный, всплывающая подсказка располагается таким образом, чтобы текст превышал экран .

Но мне нужна всплывающая подсказка, которая отображается прямо под указателем мыши, а не поверх TreeNode.

Есть идеи, как это сделать?


Покажи, не говори:

Как это:

как это http://images6.theimagehosting.com/tooltip2.th.PNG

Как я хочу:

как я хочу http://images6.theimagehosting.com/tooltip3.th.PNG

Ответы [ 3 ]

8 голосов
/ 21 ноября 2008

Я не нашел ответ, который искал, но каким-то образом заставил его работать так, как я хотел.

Раньше я пытался настроить всплывающую подсказку следующим образом:

    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 с нужным текстом.

3 голосов
/ 22 августа 2010
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 голосов
/ 02 октября 2008

Вам необходимо определить всплывающую подсказку и написать MouseOverEventHandler для TreeView. В MouseOverEventHandler вычислите узел, над которым расположена мышь, затем отобразите описание ToolTip. Также убедитесь, что вы не устанавливаете описание всплывающей подсказки более одного раза, в противном случае поведение выглядит ужасно.

Лучший способ - показать описание в StatusStrip - в левом нижнем углу формы.

Обновление:

ОК, так как вы уточнили свой вопрос. Вы можете использовать ToolTip.Show метод, в котором вы можете указать координаты:

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

Очевидно, вам придется добавить смещение к x и y.

...