TListView自适应列宽

16

我想要自动调整TListView中所有列的大小。我使用以下代码,但它没有产生任何效果。

ListView1.Columns.Add.Caption := 'Field Name';
ListView1.Columns.Items[0].Autosize := True;

在Delphi中,如何自动调整TListView的列大小。

我将ViewStyle设置为vsReport

提前致谢。

3个回答

24
我已经得到答案了。将列宽设置为 LVSCW_AUTOSIZE LVSCW_AUTOSIZE_USEHEADER 可以解决这个问题。 使用LVSCW_AUTOSIZE设置来将列标题设置为列中最大子项文本的大小, 使用LVSCW_AUTOSIZE_USEHEADER设置来将列标题设置为列标题文本的大小。
uses CommCtrl;

ListView1.Columns[0].Width := LVSCW_AUTOSIZE or LVSCW_AUTOSIZE_USEHEADER;

18
当然,最好使用适当的常量:ColumnHeaderWidth = LVSCW_AUTOSIZE_USEHEADER; 或者 ColumnTextWidth = LVSCW_AUTOSIZE; - Uli Gerhardt
3
想要补充一下,如果您从对象检查器中设置宽度,则此方法无效。 - Aaron
不幸的是,这将覆盖 MinWidth 属性。它应该是相反的。 - user1580348
应该在每次添加项目后设置这个大小还是只需要设置一次? - Armin Taghavizad
我已经更新了答案,使用了常量。 - dan-gph
我认为你只需要使用 LVSCW_AUTOSIZE_USEHEADER。这将自动调整列宽以适应标题或项中最大的内容。对这两个常量进行或运算似乎不起作用。 - dan-gph

0

只需将列宽设置为-1即可

ListView1.Columns[0].Width:=-1;

-4

试试这个:

// Assign vsReport;    
ListView1.ViewStyle := vsReport; 

  { // Add your items  }

// Assign vsList again;
ListView1.ViewStyle := vsList; 

这与所问的问题完全无关。 - Ken White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接