WinForms ListView中的可变高度行
是否可以在详细信息模式下的WinForms ListView中具有可变高度的行?
据我所知,控件上没有RowHeight或Rows [i] .Height属性。
一些博客建议实现OwnerDraw,我做了,但我仍然无法在事件处理程序中找到类似height属性的内容。
理想情况下,行高将自动resize以在需要时显示多行文本。
可以考虑的一个选择:
要覆盖所有行的项高度,请创建一个虚拟ImageList并将其设置为所需高度,并根据视图将其分配给列表视图,或者掌握http://www.codeproject.com/KB/list/changerowheight的概念的.aspx
如果使用ObjectListView ,则可以非常轻松地更改所有行的项高度。 但是,只要您使用ListView,就无法更改单个项目的高度。
如果您正在使用详细信息模式,我想知道DataGridView
是否会更加通用。 每行都有一个高度,或者您可以使用AutoSizeRowsMode自动执行此操作。 请参阅MSDN “调整Windows窗体DataGridView控件中的列和行”。
第一个答案中提到的ObjectListView不支持变量行高。 它在FAQ中清楚地说明了这一点。 基础Windows列表视图控件根本不支持变量行高。 你必须寻找其他自定义书面控件。
您可能想要考虑Matthew Hall的优秀XPTable 及其更新项目 ,以及Lee Paul Alexander的精彩Outlook风格列表 。
ListBox控件确实支持变量高度行,但您自己完成了所有绘图。
将DrawMode设置为OwnerDrawVariable
然后加
protected override void OnDrawItem(DrawItemEventArgs e) { /* Drawing code here */ } protected override void OnMeasureItem(MeasureItemEventArgs e) { /* Measure code here */ }
我在名为Task Reporter的程序中使用所有者绘制的列表框来列出用户输入的每个任务。 每个条目都有所不同,具体取决于输入的文本量。
如果你对第三方组件没问题, Better ListView正好支持这个(每个项目都有一个CustomHeight
属性,所以每个都有不同的高度):
Windows ListView控件本身(由.NET ListView控件包装)不支持变量行高。
如果你坚持使用ListView,你需要有固定的高度行。
如果你想要的是可变高度行,我会考虑使用DataGridView。 它非常支持可变高度的行(通过使用单元格样式),并且比尝试将列表视图用于制作您想要的内容更容易使用。