c# - 拖动时 TreeView 自动滚动

标签 c# winforms treeview

Winforms TreeView,我想在用户拖动和项目时向上/向下滚动。

最佳答案

与上面的几乎相同,但没有那个“顶级”错误,并且在更大的项目中使用起来更简单一些。

将此类添加到您的项目中:

public static class NativeMethods
{
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

    public static void Scroll(this Control control)
    {
        var pt = control.PointToClient(Cursor.Position);

        if ((pt.Y + 20) > control.Height)
        {
            // scroll down
            SendMessage(control.Handle, 277, (IntPtr) 1, (IntPtr) 0);
        }
        else if (pt.Y < 20)
        {
            // scroll up
            SendMessage(control.Handle, 277, (IntPtr) 0, (IntPtr) 0);
        }
    }
}

然后只需订阅 TreeView (或您希望在拖/放时启用滚动的任何其他控件/自定义控件)的 DragOver 事件并调用 Scroll() 方法。

    private void treeView_DragOver(object sender, DragEventArgs e)
    {
        treeView.Scroll();
    }

关于c# - 拖动时 TreeView 自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034942/

相关文章:

c# - 访问 Delphi DLL 抛出偶尔的异常

c# - 身份验证后,如何向 ASP.Net Core 中的 OpenIdConnect 中间件生成的身份验证 cookie 添加自定义声明?

c# - 列表框选定的项目

c# - 防止表单在服务/控制台中显示

c# - 过滤 TreeView 的所有节点和子节点

angular - Angular 4 中的树结构

c# - 执行 SSL Pinning 时忽略 SslPolicyErrors 是否安全?

c# - 仅在ISE中运行的Powershell脚本

c# - 在 C# 中打印时设置 PrinterSettings

javascript - React JS .map 与 JSON 中的对象同时返回所有数据