C# SetScrollPos:滚动条移动,但控制内容不更新

C# SetScrollPos:滚动条移动,但控制内容不更新,c#,winforms,user32,C#,Winforms,User32,这些就是我用来移动滚动位置的外部设备,我所做的就是获取当前位置,添加或减去精确数量的像素,表单上的滚动条可以按照我想要的方式完美移动,但控件中的内容保持静止。这里有什么问题?我找到了正确的API调用!: [DllImport("user32.dll")] public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); [DllImport("user32.dll", CharSet = S

这些就是我用来移动滚动位置的外部设备,我所做的就是获取当前位置,添加或减去精确数量的像素,表单上的滚动条可以按照我想要的方式完美移动,但控件中的内容保持静止。这里有什么问题?

我找到了正确的API调用!:

[DllImport("user32.dll")]
public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
[DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetScrollPos(int hWnd, int nBar);

以前我只是使用SetScrollPos,但它与PostMessageA结合使用非常好

你在滚动什么控件?另外,为什么第二个hWnd参数不是IntPtr?如果您正在与Winforms应用程序交互,那么就不需要使用P/Invoke-您应该能够使用控件提供的.NET API完成所有需要的操作。你能详细介绍一下你的应用程序吗?这是一个定制的用户控件,它没有任何方法可以控制滚动到我需要的精度。你正在违反WM_VSCROLL的合同,如果没有SB_ENDSCROLL,它永远不会被发送。使用AutoScrollPosition属性来控制滚动条的位置。@nobugs:您想详细说明如何解决我的问题,还是发布您自己的答案?
    public void ScrollTo(int Position)
    {
        SetScrollPos((IntPtr)this.Handle, 0x1, Position, true);
        PostMessageA((IntPtr)this.Handle, 0x115, 4 + 0x10000 * Position, 0);
    }