Как изменить положение ToolTip в TreeView?

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

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

Любая идея, как это сделать?

Показать, не сообщать:

Как это:

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

Как я хочу:

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

3 ответа

Я не нашел ответ, который я искал, но я как-то сделал это так, как хотел.

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

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, и когда я создаю каждый node, я просто устанавливаю его значение 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();
 }
}


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

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

Update:

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

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

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

licensed under cc by-sa 3.0 with attribution.