加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:05:48 所属栏目:大数据 来源:网络整理
导读:我想在我的Listview中添加一个不错的AutoResize机制,但我不知道该怎么做. 当Form调整大小时,我将最后一列设置为Autoresize selfs: Private Sub Form1_Resize(sender As Object,e As EventArgs) _Handles MyBase.Resize ColumnDownload.AutoResize(ColumnHea
我想在我的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的作用:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读