如何更改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(); } }