使用 MouseMove 滚动 TreeView
Posted
技术标签:
【中文标题】使用 MouseMove 滚动 TreeView【英文标题】:Scroll TreeView with MouseMove 【发布时间】:2020-03-01 21:19:06 【问题描述】:我有一个 TreeView 和它上面的节点。我想用 MouseMove 事件滚动。几周前我为面板做了这个,但面板有 AutoScrollPosition 属性可以做到这一点,所以它更容易。如何处理没有 AutoscrollPosition 属性的 TreeView?
我试过了:
private void TreeViewFilters_MouseMove(object sender, MouseEventArgs e)
if (e.Button != MouseButtons.Left)
return;
if ((startPoint.X == treeViewFilters.PointToClient(MousePosition).X) && (startPoint.Y == treeViewFilters.PointToClient(MousePosition).Y))
return;
Point currAutoS = treeViewFilters.AutoScrollPosition; //Problem here
if (startPoint.Y > treeViewFilters.PointToClient(MousePosition).Y)
if (startPoint.Y != 0)
currAutoS.Y = (Math.Abs(currAutoS.Y) + 15);
else if (startPoint.Y < treeViewFilters.PointToClient(MousePosition).Y)
currAutoS.Y = (Math.Abs(currAutoS.Y) - 15);
else
currAutoS.Y = Math.Abs(currAutoS.Y);
if (startPoint.X > treeViewFilters.PointToClient(MousePosition).X)
if (currAutoS.X != 0)
currAutoS.X = (Math.Abs(currAutoS.X) + 15);
else if (startPoint.X < treeViewFilters.PointToClient(MousePosition).X)
currAutoS.X = (Math.Abs(currAutoS.X) - 15);
else
currAutoS.X = Math.Abs(currAutoS.X);
currAutoS = treeViewFilters.AutoScrollPosition; //and here
startPoint = treeViewFilters.PointToClient(MousePosition);
请有人可以帮助我吗?
【问题讨论】:
TreeView.TopNode
和 TreeViewGetNodeAt
应该会有所帮助。
您还应该能够发送WM_VSCROLL
消息。
This post 展示了如何自动调整树视图的大小。您可以将它托管在自动滚动面板中,使树视图自动调整大小。然后使用面板的自动滚动位置。
@RezaAghaei 我尝试了你的第三个提议,因为第一个不是我想要的,但我不知道该怎么做。
【参考方案1】:
我找到了一个解决方案,它有效:
treeViewFilters.Location = new Point(treeViewFilters.Location.X, -vScrollBarFilters.Value);
【讨论】:
以上是关于使用 MouseMove 滚动 TreeView的主要内容,如果未能解决你的问题,请参考以下文章