.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在垂直滚动条的开始处完全停止而不显示丑陋的水平滚动条(如果不需要),例如: 我希望你能理解我的问题.
‘魔术解决方案’如下: 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事件. 这将有效: 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的作用:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |