[英]How to set automatic width?
我想為ListView
列使用類似“ dock”的東西。 我想為第1列和第2列設置最小寬度,但我希望它們擴展以匹配整個ListView
寬度,並將Dock
設置為Fill
。
可能嗎? 能夠將列寬設置為其長度的百分比值將是很棒的。 我正在網上搜索,許多人說將width設置為-2,但這對我不起作用。
您有兩個基本選擇:
您可以選擇的一個ColumnHeaderAutoResizeStyle
選項: ColumnContent
, HeaderSize
或None
。 選項的作用與名稱相同。 請注意,僅在設置它們時才應用它們。 這意味着要創建HeaderSize
,必須首先添加列, 然后設置選項。 為了使ColumnContent
正常工作,您需要首先添加各列, 然后再用其內容填充各項!
或者,您可以選擇編寫Resize
事件腳本,以根據需要Resize
列的大小。 我附加了調整每一列大小的代碼,以便填充ListView
並保持每一列的舊寬度百分比。
通過一些額外的編碼,您還可以混合以下選項:
除了使用AutoResizeColumns
為所有列設置相同的選項外,還可以使用AutoResizeColumn
為單個列設置選項。
如果您希望某列不參與百分比調整大小,則可以通過某種方式對其進行標記。 對於一個簡單的實現,我選擇通過將固定列設置為Tag = "#"
來標記固定列
這是將所有列設置為相同選項的代碼:
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.None);
這是一個調整大小的代碼,該代碼使所有列在保持填充ListView的同時保持其相對寬度:
private void listView1_Resize(object sender, EventArgs e)
{
int oldsum = 0;
foreach (ColumnHeader ch in listView1.Columns) oldsum += ch.Width;
foreach (ColumnHeader ch in listView1.Columns)
{
if (ch.Tag != "#") ch.Width = ch.Width * listView1.ClientSize.Width / oldsum;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.