Ele*_*ios 5 .net vb.net listview resize winforms
我想在AutoResizeListview中添加一个不错的机制,但我不知道该怎么做.
当Form调整大小时,我将最后一列设置为Autoresize selfs:
Private Sub Form1_Resize(sender As Object, e As EventArgs) _
Handles MyBase.Resize
ColumnDownload.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是这种本机自动调整方法是错误的,因为当我调整应用程序的大小时,会显示水平滚动条:


当然如果我自己用鼠标选择最后一列分隔符来增加列宽,那么我想看/使用水平滚动条,但框架自动调整只是自动增加显示水平滚动条的大小,是如此丑陋和不受欢迎有没有必要调整表单大小时自动显示滚动条!
看起来就像JDownloader和所有不错的程序一样,Autoresize在垂直滚动条的开始处完全停止而不显示丑陋的水平滚动条(如果不需要),例如:

我希望你能理解我的问题.
编辑:
' 魔术解决方案 '如下:
MyColumnHeader.Width = -2
MyColumnHeader.Width = -1
Run Code Online (Sandbox Code Playgroud)
......也一样.在这里看到好文章:http://visualbasic.about.com/od/quicktips/qt/ListViewQT.htm
实际上所有关于在.NET中调整Listview大小的谷歌搜索结果都是使用它,任何比例调整大小或替代,任何体面的自动缩放器,令人难以置信.
ObjectListView是一个围绕 .NET ListView 的开源包装器,它有一个FillsFreeSpace属性可以做到这一点。
当用户调整控件大小时,该列将变大或变小,从而永远不会显示水平滚动条。正确实施相对复杂:)
有关更多详细信息,请参阅此链接。
[编辑]
基本方案:
ResizeListView 上的事件。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);
}
Run Code Online (Sandbox Code Playgroud)
对此的限制是在缩小控件时水平滚动条会轻微闪烁。为了解决这个问题,您需要拦截WM_WINDOWPOSCHANGING消息,并将列的大小调整为控件将要变为的大小。这有点复杂——这正是 ObjectListView 所做的:)
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |