我想使用" dock"对于ListView
列。我想为第1列和第2列设置最小宽度,但我希望它们展开以匹配整个ListView
宽度,Dock
设置为Fill
。
有可能吗?能够将列宽设置为它的长度的百分比值也是很棒的。我正在网上搜索,很多人都说将宽度设置为-2,但它对我没用。
答案 0 :(得分:0)
您有两个基本选项:
您可以选择ColumnHeaderAutoResizeStyle
个选项之一:ColumnContent
,HeaderSize
或None
。这些选项符合他们的名字。请注意,它们仅在您设置时应用。这意味着,要使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;
}
}