WinFormsのユーザーコントロールを作成していますが、コントロールウィンドウのセクションをスクロールする必要があります。
不可解なことに、WinFormsではScrollWindow()メソッドを使用できないようです。そのため、InteropServicesを使用して、次のバリエーションを使用してWin32 API ScrollWindow()関数を使用しようとしています。
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
public RECT(Rectangle rect)
{
this.bottom = rect.Bottom;
this.left = rect.Left;
this.right = rect.Right;
this.top = rect.Top;
}
}
[DllImport("user32")]
public static extern int ScrollWindow(IntPtr hWnd, int nXAmount, int nYAmount,
ref RECT rectScrollRegion, ref RECT rectClip);
void MyScrollFunc(int yAmount)
{
RECT r = new RECT(ClientRectangle);
ScrollWindow(Handle, 0, yAmount, ref r, ref r);
}
その結果、このコードはまったく何もしません。スクロール後にUpdate()を呼び出すなど、このコードのさまざまなバリエーションを試しました(これは必要ありません)。
ScrollWindow()は1を返します。これは成功を意味しますが、何を試してもコントロールウィンドウのコンテンツには影響しません。
このように表示を変更することを妨げるユーザーコントロールについて何かがあるかどうか誰かが知っていますか?これは、Windows XPのC#ExpressEdition2008でテストしています。