.net – 为Listview列实现一个漂亮的自动调整机制?

前端之家收集整理的这篇文章主要介绍了.net – 为Listview列实现一个漂亮的自动调整机制?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的Listview中添加一个不错的AutoResize机制,但我不知道该怎么做.

当Form调整大小时,我将最后一列设置为Autoresize selfs:

Private Sub Form1_Resize(sender As Object,e As EventArgs) _
Handles MyBase.Resize

    ColumnDownload.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize)

End Sub

但是这种本机自动调整方法错误的,因为当我调整应用程序的大小时,会显示水平滚动条:

当然如果我自己用鼠标选择最后一列分隔符来增加列宽,那么我想看/使用水平滚动条,但框架自动调整只是自动增加显示水平滚动条的大小,是如此丑陋和不受欢迎有没有必要调整表单大小时自动显示滚动条!

看起来就像JDownloader和所有不错的程序一样,Autoresize在垂直滚动条的开始处完全停止而不显示丑陋的水平滚动条(如果不需要),例如:

我希望你能理解我的问题.

EDIT:

‘魔术解决方案’如下:

MyColumnHeader.Width = -2
MyColumnHeader.Width = -1

……也一样.在这里看到好文章http://visualbasic.about.com/od/quicktips/qt/ListViewQT.htm

实际上所有关于在.NET中调整Listview大小的谷歌搜索结果都是使用它,任何比例调整大小或替代,任何体面的自动缩放器,令人难以置信.

ObjectListView是一个围绕.NET ListView的开源包装器,它有一个FillsFreeSpace属性,它就是这样做的.

用户调整控件的大小时,列将变大或变小,从而永远不会显示水平滚动条.正确实施相对复杂:)

有关详细信息,请参见this link.

[编辑]

基本方案:

>在ListView上侦听Resize事件.
>计算除最后一列之外的所有列的宽度
>将最后一列调整为其他列的宽度与ListView的ClientSize的差值.

这将有效:

private void ResizeLastColumn(int listViewWidth)
{
    int totalColumnWidth = 0;
    for (int i =0 ; i < listView1.Columns.Count - 1; i++) {
        totalColumnWidth += listView1.Columns[i].Width;
    }

    colLast.Width = Math.Max(listViewWidth - totalColumnWidth,10);
}

private void listView1_Resize(object sender,EventArgs e)
{
    ResizeLastColumn(this.listView1.ClientSize.Width);
}

对此的限制是当缩小控件时水平滚动条会略微闪烁.要解决这个问题,您需要拦截WM_WINDOWPOSCHANGING消息,并将列的大小调整为控件将变为的大小.这有点复杂 – 而且正是ObjectListView的作用:)

猜你在找的VB相关文章