Я создаю пользовательский элемент управления для WinForms, и у меня есть необходимость прокрутить раздел окна управления.
Необъяснимо, но, похоже, в WinForms нет метода ScrollWindow (). Поэтому я пытаюсь использовать InteropServices для использования функции ScrollWindow () Win32 API, используя следующие варианты:
[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, что означает успех, но оно просто не влияет на содержимое окна управления, независимо от того, что я пытаюсь.
Кто-нибудь знает, есть ли что-то в пользовательском элементе управления, который не позволяет изменять отображение таким образом? Я тестирую это на C # Express Edition 2008 на Windows XP.