san*_*art 1 c# treeview tooltip winforms
我想将添加ToolTip
到TreeView
节点,使气球出现在鼠标坐标:
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);
}
Run Code Online (Sandbox Code Playgroud)
问题是,ToolTip
分配给TreeView
,而不是TreeNode
,并且气球的位置是非常奇怪的 - 不是在预期的鼠标坐标,而是在某处treeView1
.
我试图使用,toolTip1.Show()
但InitialDelay
财产被忽略.
如何将气球ToolTip
放在a上TreeNode
并延迟显示?
的ToolTip
控制是没有必要的,以便以显示工具提示TreeNodes
.该TreeView
有一个属性ShowNodeToolTips
,你可以设置为true
与TreeNodes
有ToolTipText
产权.
但是,如果要将其显示ToolTip
为气球,事情会变得更加复杂.幸运的是TreeView
有一个NodeMouseHover
事件.与a一起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);
}
Run Code Online (Sandbox Code Playgroud)
在NodeMouseHover
我们启动过程中
private void treeView_NodeMouseHover(object sender,
TreeNodeMouseHoverEventArgs e)
{
timer.Stop();
toolTip.Hide(this);
toolTipNode = e.Node;
timer.Interval = InitialToolTipDelay;
timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
计时器将启动两次:一次用于初始延迟,一次用于气球的最大显示时间.因此,我们必须在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);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我们不想显示ToolTip
鼠标是否离开TreeView
private void treeView_MouseLeave(object sender, EventArgs e)
{
timer.Stop();
toolTip.Hide(this);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3505 次 |
最近记录: |