代码之家  ›  专栏  ›  技术社区  ›  dbkk

WinForms ListView中的可变高度行

  •  7
  • dbkk  · 技术社区  · 15 年前

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

    据我所知,控件上没有rowheight或rows[i].height属性。

    一些博客建议实现OwnerDraw,我做到了,但在事件处理程序中仍然找不到类似Height属性的内容。

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

    7 回复  |  直到 10 年前
        1
  •  2
  •   AZ.    12 年前

    一个选择是:

    若要覆盖所有行的项目高度,请创建一个虚拟ImageList并将其设置为所需高度,然后根据视图将其分配给ListView,或者掌握 http://www.codeproject.com/KB/list/changerowheight.aspx

    如果你使用 ObjectListView ,可以将所有行的项目高度 easily . 但是,只要使用ListView,就没有办法更改单个项的高度。

        2
  •  4
  •   Marc Gravell    15 年前

    如果你使用的是细节模式,我想知道 DataGridView 不会更多才多艺。每行都有一个高度,或者可以使用AutoSizeRowsMode自动执行此操作。见 MSDN “调整Windows窗体DataGridView控件中的列和行的大小”。

        3
  •  2
  •   Grammarian    15 年前

    第一个答案中提到的ObjectListView不支持可变行高。它在它的 FAQ . 基本的Windows ListView控件不支持可变行高。您必须查看其他自定义编写的控件。

    你可能想考虑 Matthew Hall’s excellent XPTable its update project 以及Lee Paul Alexander_ Outlook-style list .

        4
  •  1
  •   Chris Thompson    15 年前

    列表框控件确实支持可变高度的行,但您已经自己完成了所有绘图。

    将drawmode设置为ownerdrawvariable

    然后添加

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

    我在名为task reporter的程序中使用一个所有者绘制的列表框来列出用户输入的每个任务。根据输入的文本量,每个条目都是不同的。

        5
  •  1
  •   Libor    10 年前

    如果您对第三方组件满意, Better ListView 完全支持这个(每个项目都有一个 CustomHeight 属性,以便每个属性具有不同的高度):

    enter image description here

        6
  •  0
  •   Bevan    15 年前

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

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

        7
  •  0
  •   Ken Wootton    15 年前

    如果您需要可变高度的行,我将考虑改用DataGridView。它非常支持可变高度的行(通过使用单元格样式),并且比尝试引导列表视图执行所需操作容易得多。