我有一个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);
}
有人请帮助我!
答案 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();
}