使用 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.TopNodeTreeViewGetNodeAt 应该会有所帮助。 您还应该能够发送WM_VSCROLL 消息。 This post 展示了如何自动调整树视图的大小。您可以将它托管在自动滚动面板中,使树视图自动调整大小。然后使用面板的自动滚动位置。 @RezaAghaei 我尝试了你的第三个提议,因为第一个不是我想要的,但我不知道该怎么做。 【参考方案1】:

我找到了一个解决方案,它有效:

                treeViewFilters.Location = new Point(treeViewFilters.Location.X, -vScrollBarFilters.Value);

【讨论】:

以上是关于使用 MouseMove 滚动 TreeView的主要内容,如果未能解决你的问题,请参考以下文章

mouseMove上的水平滚动 - 较小div中的宽div与溢出:隐藏(无法使数学工作)

获取 Angular 组件的滚动位置

jQuery整屏滚动

自定义滚动条

js事件(Event)知识整理

js事件(Event)知识整理