WinForms ListView中的可变高度行

时间:2009-03-09 12:33:42

标签: c# .net winforms listview

是否可以在详细信息模式下的WinForms ListView中拥有可变高度的行?

据我所知,控件上没有RowHeight或Rows [i] .Height属性。

有些博客建议我实现OwnerDraw,但我仍然无法在事件处理程序中找到类似height属性的内容。

理想情况下,行高会自动调整大小以在需要时显示多行文字。

7 个答案:

答案 0 :(得分:4)

如果您正在使用详细信息模式,我想知道DataGridView是否会更加通用。每行都有一个高度,或者您可以使用AutoSizeRowsMo​​de自动执行此操作。请参阅MSDN“调整Windows窗体DataGridView控件中的列和行”。

答案 1 :(得分:2)

要考虑的一个选择:

要覆盖所有行的项目高度,请创建一个虚拟ImageList并将其设置为所需的高度,并根据视图将其指定给列表视图,或者掌握http://www.codeproject.com/KB/list/changerowheight.aspx的概念

如果您使用ObjectListView,则可以更改所有行的项目高度easily。但是,只要您使用ListView,就无法更改单个项目高度。

答案 2 :(得分:2)

第一个答案中提到的ObjectListView不支持变量行高。它在FAQ中清楚地说明了这一点。基础Windows列表视图控件根本不支持变量行高。你必须寻找其他自定义书面控件。

您可能需要考虑Matthew Hall’s excellent XPTableits update project,以及Lee Paul Alexander的精彩Outlook-style list

答案 3 :(得分:1)

ListBox控件支持可变高度行,但您自己完成了所有绘图。

将DrawMode设置为OwnerDrawVariable

然后添加

protected override void OnDrawItem(DrawItemEventArgs e)
{
  /* Drawing code here */
}

protected override void OnMeasureItem(MeasureItemEventArgs e)
{
  /* Measure code here */
}

我在名为Task Reporter的程序中使用所有者绘制的列表框来列出用户输入的每个任务。每个条目都有所不同,具体取决于输入的文本数量。

答案 4 :(得分:1)

如果你对第三方组件没问题,Better ListView完全支持这一点(每个项目都有CustomHeight属性,因此每个组件的高度可以不同):

enter image description here

答案 5 :(得分:0)

Windows ListView控件本身(由.NET ListView控件包装)不支持变量行高。

如果你坚持使用ListView,你需要有固定的高度行。

答案 6 :(得分:0)

如果您想要可变高度行,我会考虑使用DataGridView。它非常支持可变高度的行(通过使用单元格样式),并且比尝试将列表视图用于制作您想要的内容更容易使用。