我正在实现一个从ListView派生的自定义控件。
我希望最后一列填充剩余空间(这是一个非常常见的任务),我通过重写OnResize方法来实现:
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
if (Columns.Count == 0)
return;
Columns[Columns.Count - 1].Width = -2; // -2 = Fill remaining space
}
或通过其他方式:
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
if (!_autoFillLastColumn)
return;
if (Columns.Count == 0)
return;
int TotalWidth = 0;
int i = 0;
for (; i < Columns.Count - 1; i++)
{
TotalWidth += Columns[i].Width;
}
Columns[i].Width = this.DisplayRectangle.Width - TotalWidth;
}
编辑:
这个方法在将ListView嵌入父容器并通过该控件调整大小时,会出现问题。每隔一秒钟,控件尺寸就会缩小(例如拖动边框一个像素),底部会出现一个无法移动的滚动条。
结果是当我拖动父窗口的大小时,在ListView中会出现闪烁的滚动条,并且有50%的概率在停止拖动时仍然存在。