【问题标题】:Variable height rows in WinForms ListViewWinForms ListView中的可变高度行
【发布时间】:2010-10-12 04:19:57
【问题描述】:

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

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

一些博客建议实现 OwnerDraw,我这样做了,但我仍然无法从事件处理程序中找到任何类似于 height 属性的东西。

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

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      可以考虑的一个选项:

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

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

      【讨论】:

      • 这是一种一次性的解决方案(如果已经知道高度),但我希望它能够适应长的多行单元格。
      【解决方案3】:

      第一个答案中提到的 ObjectListView 不支持可变行高。它在FAQ 中清楚地说明了这一点。底层的 Windows 列表视图控件根本不支持可变行高。您必须查看其他自定义的书面控件。

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

      【讨论】:

        【解决方案4】:

        如果可变高度行是您想要的,我会考虑改用 DataGridView。它非常支持可变高度的行(通过使用单元格样式),并且比试图将列表视图硬塞给你想要的东西要容易得多。

        【讨论】:

          【解决方案5】:

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

          将 DrawMode 设置为 OwnerDrawVariable

          然后添加

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

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

          【讨论】:

          • 如果无法使用 DataGridView,那么这似乎是您唯一的选择。
          • 这是用于 ListBox,而不是 ListView。不支持 MVC / 虚拟模式的不同控件。
          • 他没有说明他需要虚拟模式,所以我只是建议一个可以满足需要的替代控件。
          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 我尝试了 GridView,但由于某种原因,它要慢得多(在 VirtualMode 下有很多项目)。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-04
            • 1970-01-01
            • 2012-02-15
            • 1970-01-01
            • 2019-07-18
            • 2014-01-03
            • 1970-01-01
            相关资源
            最近更新 更多