我需要一个listview来根据标题和内容的宽度自动调整其列的大小,而其他每个答案只会执行一个或另一个。
示例:
listView1.GridLines = true;
// Create three items and three sets of subitems for each item.
ListViewItem item1 = new ListViewItem("item1asdfghjkl", 0);
item1.SubItems.Add("1");
item1.SubItems.Add("2");
item1.SubItems.Add("3");
ListViewItem item2 = new ListViewItem("item2", 1);
item2.SubItems.Add("4");
item2.SubItems.Add("5");
item2.SubItems.Add("6");
ListViewItem item3 = new ListViewItem("item3", 0);
item3.SubItems.Add("7");
item3.SubItems.Add("8");
item3.SubItems.Add("9");
// Create columns for the items and subitems.
// Width of -2 indicates auto-size.
listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 4", -2, HorizontalAlignment.Left);
//these two lines
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
//Add the items to the ListView.
listView1.Items.AddRange(new ListViewItem[] { item1, item2, item3 });
这里的注释是,无论哪种(或两者)调整样式,都会切断标题或内容。
似乎没有一种可靠的方法来获取内容的显示大小以手动调整列和标题的大小。
答案 0 :(得分:0)
Anton Kedrov在这里回答 - ListView AutoResizeColumns based on both Column content and header是最好的一个,但在我的情况下,我有一个包含超过50列的列表视图,我经常更新其数据,在这种情况下,我注意到listview的这个.AutoResizeColumns表现很多更快的工作,所以我也写这个解决方案
通过设置为-2
的第一种方法public void AutoUpdateColumnWidth(ListView lv)
{
for (int i = 0; i <= lv.Columns.Count - 1; i++) {
lv.Columns(i).Width = -2;
}
}
我使用的第二种方法(多次调用时闪烁较少)
public void AutoUpdateColumnWidth(ListView lv)
{
ListViewItem nLstItem = new ListViewItem(lv.Columns(0).Text);
for (int i = 1; i <= lv.Columns.Count - 1; i++) {
nLstItem.SubItems.Add(lv.Columns(i).Text);
}
v.Items.Add(nLstItem);
lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lv.Items.RemoveAt(nLstItem.Index);
}
答案 1 :(得分:0)
这很简单(虽然我需要一段时间才弄明白)......
我们知道宽度必须至少与列标题一样大,以便我们看到所有标题文本。除此之外,宽度可以扩大以容纳内容。因此,我们执行以下操作:
编辑:我很抱歉,我忘记了我没有使用标准列表视图,而是第三方产品BetterListView(免费版本可用)。标准列表视图列似乎不支持最小宽度。我确实推荐BetterListView作为一个很好的选择(更好的功能集和性能)。