【问题标题】:ListView text is truncated -- how do I display the entire text of an item?ListView 文本被截断 - 如何显示项目的整个文本?
【发布时间】:2010-11-29 20:09:55
【问题描述】:

这是一张使用 LargeIcons 的 System.Windows.Forms.ListView 的图片

所选项目显示所有文本

例如左上角的项目只显示其名称的 11 个字符,如果选中它会完全显示。对于未选择的项目,如何让它显示所有文本(或至少超过 11 个字符)?

【问题讨论】:

  • 你可能不得不去所有者绘制...这是标准行为,即使在 Windows 资源管理器中也是如此。
  • 当我在 Explorer (win-7) 中设置 LargeIcon 视图时,这不会发生。文件名,即使是 非常 长的文件名,总是会完整显示。
  • 另一种想法:您是否尝试过使用平铺视图模式?

标签: c# winforms listview


【解决方案1】:

有 DrawItem 事件http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.drawitem.aspx。在此事件中,您可以访问 System.Drawing.Graphics.DrawString 方法。

void view_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        e.Graphics.DrawString(e.Item.Text, drawFont, Brushes.Black, 
            new RectangleF(e.Item.Position.X,
                e.Item.Position.Y,
                20, 
                160));

    }

我输入了一些宽度/高度值,但您应该使用 MeasureString 或类似方法。 也不要忘记在ListView上设置OwnerDraw=true,否则不起作用。

【讨论】:

  • 这看起来很有希望,但什么是“drawFont”?我得到:“名称 'drawFont' 在当前上下文中不存在”
  • 好的,我根据 ListView 的属性创建了自己的字体,但结果比一袋烟头丑 9 倍——而且我还必须在其中添加图标……有成为一种更简单的方法。它应该是 ListView 或 ListViewItem 上的一个属性(“ShowAllText”或类似的)。
【解决方案2】:

我不久前遇到了这个问题,并通过在 x 字符之后和/或大写字母之前插入一个空格来解决,因此文本被包裹在我想要的位置。这有点像 hack,但很容易解决。您当然需要跟踪您对文本所做的更改,以便在用户选择该项目以供进一步使用时将其反转。

【讨论】:

    【解决方案3】:

    警告:当视图类型为 Details 时,这对我有用,我没有尝试过 LargeIcons。

    在将输出(我的是批量的)写入列表视图后,添加以下内容:

    lstResults.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.HeaderSize);
    lstResults.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2021-12-28
      相关资源
      最近更新 更多