【发布时间】:2008-10-02 14:41:09
【问题描述】:
当使用工具提示来显示 TreeNode 的详细描述时,工具提示会绘制在节点的顶部,就好像它正在完成节点的文本一样。此外,如果文本很长,则工具提示的位置会使得文本超出屏幕。
但我需要的是显示在鼠标指针正下方而不是 TreeNode 顶部的工具提示。
知道怎么做吗?
显示,不告诉:
怎么样:
我想要的:
【问题讨论】:
标签: c# .net winforms treeview tooltip
当使用工具提示来显示 TreeNode 的详细描述时,工具提示会绘制在节点的顶部,就好像它正在完成节点的文本一样。此外,如果文本很长,则工具提示的位置会使得文本超出屏幕。
但我需要的是显示在鼠标指针正下方而不是 TreeNode 顶部的工具提示。
知道怎么做吗?
显示,不告诉:
怎么样:
我想要的:
【问题讨论】:
标签: c# .net winforms treeview tooltip
我没有找到我正在寻找的答案,但我以某种方式让它按我想要的方式工作。
之前,我试图按如下方式设置工具提示:
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();
}
}
【讨论】:
您需要为 TreeView 定义一个 ToolTip 并编写一个 MouseOverEventHandler。在 MouseOverEventHandler 中计算鼠标所在的节点,然后显示描述 ToolTip。还要确保您没有多次设置工具提示描述,否则行为会很丑陋。
更好的方法是在表单左下角的 StatusStrip 中显示描述。
更新:
好的,因为你已经澄清了你的问题。您可以使用ToolTip.Show 方法指定坐标:
public void Show(
string text,
IWin32Window window,
int x,
int y,
int duration
)
显然,您必须为 x 和 y 添加偏移量。
【讨论】: