gpt4 book ai didi

c# - 将气球工具提示定位在树节点上

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:05 26 4
gpt4 key购买 nike

我想在 TreeView 节点上添加一个 ToolTip 并在鼠标坐标处显示一个气球:

private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
node = treeView1.getNodeAt(e.X, e.Y);
toolTip1 = new ToolTip();
toolTip1.IsBalloon = true;
toolTip1.InitialDelay = 500;
toolTip1.SetToolTip(treeView1, node.Text);
}

问题是ToolTip被分配给了TreeView,而不是TreeNode,而且气球的位置很奇怪- 不是在预期的鼠标坐标处,而是在 treeView1 中的某处。

我尝试使用 toolTip1.Show()InitialDelay 属性被忽略了。

如何将气球 ToolTip 放置在 TreeNode 上并延迟其显示?

最佳答案

ToolTip 控件对于显示 TreeNodes 的工具提示不是必需的。 TreeView 有一个属性 ShowNodeToolTips,您可以将其设置为 true 并且 TreeNodes 有一个 ToolTipText 属性。


但是,如果您想将 ToolTip 显示为气球,事情就会变得更加复杂。幸运的是 TreeView 有一个 NodeMouseHover 事件。与 Timer 一起,我们可以使我们的 ToolTip 按预期运行。

在我们的表单中,我们进行这些声明并设置定时器事件处理程序

private const int InitialToolTipDelay = 500, MaxToolTipDisplayTime = 2000;

private ToolTip toolTip = new ToolTip();
private Timer timer = new Timer();
private TreeNode toolTipNode;

public frmTreeViewWithToolTip()
{
InitializeComponent();
toolTip.IsBalloon = true;
timer.Tick += new EventHandler(timer_Tick);
}

NodeMouseHover 中我们启动流程

private void treeView_NodeMouseHover(object sender,
TreeNodeMouseHoverEventArgs e)
{
timer.Stop();
toolTip.Hide(this);

toolTipNode = e.Node;

timer.Interval = InitialToolTipDelay;
timer.Start();
}

计时器将启动两次:一次用于初始延迟,一次用于气球的最大显示时间。因此我们必须在 timer.Tick 事件处理程序中处理这两种情况

void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
if (timer.Interval == InitialToolTipDelay) {
Point mousePos = treeView.PointToClient(MousePosition);

// Show the ToolTip if the mouse is still over the same node.
if (toolTipNode.Bounds.Contains(mousePos)) {
// Node location in treeView coordinates.
Point loc = toolTipNode.Bounds.Location;

// Node location in form client coordinates.
loc.Offset(treeView.Location);

// Make balloon point to upper right corner of the node.
loc.Offset(toolTipNode.Bounds.Width - 7, -12);

toolTip.Show("Node: " + toolTipNode.Text, this, loc);

timer.Interval = MaxToolTipDisplayTime;
timer.Start();
}
} else {
// Maximium ToolTip display time exceeded.
toolTip.Hide(this);
}
}

最后,如果鼠标离开 TreeView,我们不想显示 ToolTip

private void treeView_MouseLeave(object sender, EventArgs e)
{
timer.Stop();
toolTip.Hide(this);
}

关于c# - 将气球工具提示定位在树节点上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com