Создание ListView ScrollBar Появилось событие - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть ListView, в котором я хочу создать событие, когда появляется VScrollBar.Я на самом деле не хочу горизонтальную полосу прокрутки, и всякий раз, когда появляется полоса прокрутки, я хочу изменить размеры столбцов, чтобы они соответствовали окну.Я уже могу проверить видимость полосы прокрутки, но я не знаю название события, которое запускается, когда появляются полосы прокрутки.Вот мой код:

    private const int WS_VSCROLL = 0x200000;
    private const int GWL_STYLE = -16;
    [DllImport("user32.dll")]
    public static extern int GetWindowLong(IntPtr hWnd, int Index);
    private static bool IsScrollbarVisible(IntPtr hWnd)
    {
        bool bVisible = false;
        int nMessage = WS_VSCROLL;
        int nStyle = GetWindowLong(hWnd, GWL_STYLE);
        bVisible = ((nStyle & nMessage) != 0);
        return bVisible;
    }

И работает так:

    if (IsScrollbarVisible(listview.Handle))
    {
          columnHeader1.Width = listview.ClientRectangle.Width - (columnHeader2.Width + columnHeader3.Width);
    }

Кто-то, пожалуйста, помогите мне!

1 Ответ

2 голосов
/ 06 мая 2012

ClientSizeChanged Событие сработает, но для правильной работы мы должны добавить BeginUpdate() и EndUpdate() ..

Этот код выполняет все:

    private void listview_ClientSizeChanged(object sender, EventArgs e)
    {
        listview.BeginUpdate();
        if (IsScrollbarVisible(listview.Handle))
        {
            columnHeader1.Width = listview.ClientRectangle.Width - (columnHeader2.Width + columnHeader3.Width);
        }
        listview.EndUpdate();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...