C# 如何为TreeView实现NodeMouseOut事件模拟?
我想在用户鼠标悬停在节点上时显示一个特殊的弹出控件,并在鼠标离开节点时隐藏它C# 如何为TreeView实现NodeMouseOut事件模拟?,c#,.net,winforms,treeview,mouseout,C#,.net,Winforms,Treeview,Mouseout,我想在用户鼠标悬停在节点上时显示一个特殊的弹出控件,并在鼠标离开节点时隐藏它 第一部分我们有nodemousehave事件,但是如何处理隐藏过程?可以使用计时器来测试鼠标位置: public class TreeViewEx : TreeView { public event TreeViewEventHandler NodeMouseLeave; private System.Windows.Forms.Timer timer; private TreeNode mouseNod
第一部分我们有
nodemousehave
事件,但是如何处理隐藏过程?可以使用计时器来测试鼠标位置:
public class TreeViewEx : TreeView {
public event TreeViewEventHandler NodeMouseLeave;
private System.Windows.Forms.Timer timer;
private TreeNode mouseNode = null;
public TreeViewEx() {
if (System.ComponentModel.LicenseManager.UsageMode == LicenseUsageMode.Runtime) {
timer = new System.Windows.Forms.Timer();
timer.Tick += timer_Tick;
timer.Enabled = true;
}
}
protected void OnNoseMouseLeave(TreeViewEventArgs e) {
if (this.NodeMouseLeave != null) {
this.NodeMouseLeave(this, e);
}
}
void timer_Tick(object sender, EventArgs e) {
if (this.ClientRectangle.Contains(this.PointToClient(MousePosition))) {
TreeNode testNode = this.GetNodeAt(this.PointToClient(MousePosition));
if (testNode == null) {
if (mouseNode != null) {
OnNoseMouseLeave(new TreeViewEventArgs(mouseNode));
mouseNode = null;
}
} else {
if (mouseNode != null && !testNode.Equals(mouseNode)) {
OnNoseMouseLeave(new TreeViewEventArgs(mouseNode));
}
mouseNode = testNode;
}
} else {
if (mouseNode != null) {
OnNoseMouseLeave(new TreeViewEventArgs(mouseNode));
mouseNode = null;
}
}
}
}
你需要一个计时器。检查您是否控制了该控件,如果是,请检查哪个节点。谢谢。即使这是一个解决办法,它仍然会起作用,所以把它作为答案。如果没有更好的答案,我会接受的。