【问题标题】:How to implement NodeMouseOut event analog for TreeView?如何为 TreeView 实现 NodeMouseOut 事件模拟?
【发布时间】:2015-10-29 17:12:35
【问题描述】:

我想在用户鼠标hovers节点时显示一个特殊的弹出控件,并在鼠标离开节点时隐藏它。

我们有第一部分的NodeMouseHover 事件,但是隐藏过程怎么办?

【问题讨论】:

  • 你需要一个计时器。检查你是否在控制,如果是,是哪个节点。
  • 谢谢。即使这是解决方法 - 它仍然可以工作,所以将其作为答案。如果没有更好的答案出现,我会接受。

标签: c# .net winforms treeview mouseout


【解决方案1】:

可以使用计时器来测试鼠标位置:

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;
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2018-01-14
    • 2017-07-07
    • 2022-10-24
    • 2014-09-17
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多