Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Windows Mobile 6.5 , .net cf3.5 и ScrollBar


Автор: Kero 7.7.2010, 13:25
Доброго времени суток!
Пишу под windows mobile используя compact framework 3.5

Имееться Panel. В эту панель засовываються контролы рядами. После некоторого цикла засовываний появляеться вертикальный скроллБар так как установлено свойство AutoScroll  = true.

Мне необходимо следующее: после того как очередной ряд контролов добавился в панель, сместить вертикальный скролл в самый низ. Я пытался это сделать следующим кодом:
Код

//Импортируем функции с ядрышка
    [DllImport("coredll.dll")]
    public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw ); 

    [DllImport("coredll.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);

    public const int SB_VERT = 1;
    public const int SIF_RANGE = 0x1;
    public const int SIF_PAGE = 0x2;
    public const int SIF_POS = 0x4;
    public const int SIF_DISABLENOSCROLL = 0x8;
    public const int SIF_TRACKPOS = 0x10;
    public const int SIF_ALL = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL | SIF_TRACKPOS;

    [StructLayout(LayoutKind.Sequential)]
    public struct SCROLLINFO
    {
      public int cbSize;
      public int fMask;
      public int nMin;
      public int nMax;
      public int nPage;
      public int nPos;
      public int nTrackPos;
    }


//В волшебный момент перезаполнения панели пытаемся подвинуть скрольчечег

        SCROLLINFO gamePanelScrolInfo = new SCROLLINFO();
        gamePanelScrolInfo.cbSize = Marshal.SizeOf(gamePanelScrolInfo);
        gamePanelScrolInfo.fMask = SIF_ALL;
        GetScrollInfo(gamePanel.Handle, SB_VERT, ref gamePanelScrolInfo);
        SetScrollPos(gamePanel.Handle, SB_VERT, gamePanelScrolInfo.nMax, true);


Но вышеописаный код двигает только скроллбар, оставляя контент панели тем же. Более того после этой операции при скроллироании стилусом - контент панели укорачиваетсья снизу.

Я полагаю что вышеописанными действиями я изменяю позицию скролла, но не сообщаю системе что скролл подвинут.

Есть мысли как решить проблемму?

Автор: AnarchyMob 20.8.2010, 21:17
Попробуйте послать окну сообщение WM_VSCROLL

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)