我想补充一个体面的AutoResize
我的 Listview 的机制,但我不知道该怎么做。
当表单调整大小时,我将最后一列设置为 Autoresize 本身:
Private Sub Form1_Resize(sender As Object, e As EventArgs) _
Handles MyBase.Resize
ColumnDownload.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize)
End Sub
但是这种原生的 autoresize 方法是错误的,因为当我调整应用程序大小时,会显示水平滚动条:
当然,如果我自己用鼠标选择最后一列分隔符来增加列宽,那么我想查看/使用水平滚动条,但框架自动调整大小只会自动增加显示水平滚动条的大小,太丑陋了,没有必要在调整表单大小时自动显示该滚动条!
我想要的外观就像 JDownloader 和所有好的程序都有,一个自动调整大小,它在垂直滚动条的开始处完全停止,如果不需要,不显示丑陋的水平滚动条,例如像这样:
我希望你能理解我的问题。
EDIT:
“神奇的解决方案”,例如:
MyColumnHeader.Width = -2
MyColumnHeader.Width = -1
......也一样。在这里查看好文章:http://visualbasic.about.com/od/quicktips/qt/ListViewQT.htm
真的所有关于在 .NET 中调整 Listview 大小的 Google 搜索结果都在使用它,任何比例调整大小或替代方案,任何像样的自动调整器,令人难以置信。
最佳答案
ObjectListView ,一个围绕 .NET ListView 的开源包装器,有一个 FillsFreeSpace
属性正是这样做的。
当用户调整控件大小时,该列将变大或变小,从而永远不会显示水平滚动条。正确实现相对复杂:)
见 this link更多细节。
[编辑]
基本方案:
Resize
ListView 上的事件。 ClientSize
的宽度之差。的 ListView 。 这将起作用:
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 所做的:)
关于.net - 为 Listview 列实现一个很好的自动调整大小机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685887/