当用户将鼠标悬停在TreeView控件的特定TreeNode控件上时显示不同的光标

问题描述 投票:0回答:1

当用户将指针悬停在具有特别命名的父节点的节点上时,我需要将窗体的光标更改为光标Cursors.Hand

我在实现此功能时遇到的问题是,当用户将指针移离所关注的TreeNode时,将光标改回默认值。

我已经处理了NodeMouseHover控件的TreeView事件(如最后的代码片段所示),以将指针更改为备用光标,并在将指针移至另一个节点时将其更改为默认光标,但是当用户将指针从节点移开到TreeView控件的空白区域时,这不会处理。

我最初的,也是唯一的解决此问题的直觉是获取位置并计算需要更改光标的TreeNode的面积,并检查指针是否仍在事件中的其中之一上MouseMove控件的TreeView事件的处理程序,但是,我相信,这不是一个很好的解决方案,因为有很多TreeNode都需要这种行为,这需要循环遍历它们中的许多以进行检查,这又可能导致应用程序在极少数情况下没有响应。

提前感谢。

PS有问题的代码段:

this.treeView.NodeMouseHover += delegate (object sender, TreeNodeMouseHoverEventArgs e)
{
   bool isNewCursorAssigned = false;
   if (e.Node.Parent != null)
   {
      if (e.Node.Parent.Text == "someTxt")
      {
         this.Cursor = Cursors.Hand;
         isNewCursorAssigned = true;
      }
   }
   if (isNewCursorAssigned == false && this.Cursor != this.DefaultCursor)
      this.Cursor = this.DefaultCursor;
};

我要求表单的光标更改为光标Cursors.Hand,当用户将指针悬停在具有特定名称的父节点的节点上时。我在执行此操作时遇到的问题是...

c# windows winforms treeview treenode
1个回答
0
投票

改为处理MouseMove,从当前鼠标位置获取Node,向后迭代以获取当前ParentNode(如果有,则返回父级的父级),然后更改Cursor ]相应地:

© www.soinside.com 2019 - 2024. All rights reserved.