创建ListView ScrollBar出现的事件

时间:2012-02-26 09:41:49

标签: c# listview scrollbar

我有一个ListView,我想在VScrollBar出现时创建一个事件。我实际上不想要一个水平滚动条,每当VScrollbar出现时我想调整列的大小以使其适合窗口。我已经可以检查滚动条的可见性,但我不知道ScrollBars出现时触发的事件的名称。 这是我的代码:

    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 个答案:

答案 0 :(得分:2)

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();
    }