如何设置自动宽度?

时间:2014-07-27 04:44:18

标签: c# winforms listview

我想使用" dock"对于ListView列。我想为第1列和第2列设置最小宽度,但我希望它们展开以匹配整个ListView宽度,Dock设置为Fill

有可能吗?能够将列宽设置为它的长度的百分比值也是很棒的。我正在网上搜索,很多人都说将宽度设置为-2,但它对我没用。

1 个答案:

答案 0 :(得分:0)

您有两个基本选项:

  • 您可以选择ColumnHeaderAutoResizeStyle个选项之一:ColumnContentHeaderSizeNone。这些选项符合他们的名字。请注意,它们仅在您设置时应用。这意味着,要使HeaderSize 首先添加列,然后设置选项。要使ColumnContent工作,您需要首先添加列,并用内容填充项目!

  • 或者您可以选择编写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;
  }
}