簡體   English   中英

如何設置自動寬度?

[英]How to set automatic width?

我想為ListView列使用類似“ dock”的東西。 我想為第1列和第2列設置最小寬度,但我希望它們擴展以匹配整個ListView寬度,並將Dock設置為Fill

可能嗎? 能夠將列寬設置為其長度的百分比值將是很棒的。 我正在網上搜索,許多人說將width設置為-2,但這對我不起作用。

您有兩個基本選擇:

  • 您可以選擇的一個ColumnHeaderAutoResizeStyle選項: ColumnContentHeaderSizeNone 選項的作用與名稱相同。 請注意,僅在設置它們時才應用它們。 這意味着要創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM