【问题标题】:ListView OwnerDraw height of itemsListView OwnerDraw 项目高度
【发布时间】:2010-12-29 20:23:34
【问题描述】:

我有一个拥有 OwnerDraw = true 和详细视图模式的列表视图。 我希望当列表包含 3,4 或 5 个项目时,每个项目的高度为 listview.Height/3 ,4 或 5 而无需滚动。

我知道项目的高度取决于字体的大小。

这不行

 listView.Font = new Font("Arial", listView.Height / nOfItems);

我在 DrawItem 事件中以恒定字体大小绘制文本:e.Graphics.DrawString(....)。

【问题讨论】:

  • 设置字体没问题。但是您以像素而不是点为单位传递大小。使用 TextRenderer 绘制文本。

标签: c# winforms listview fonts


【解决方案1】:

我成功的做法是通过为图像列表分配一个具有我想要的适当高度的虚拟图像来调整列表视图的高度。

例如为了让每行 40 像素高,我将一个 40 像素高的图像分配给图像列表中的列表视图。

您不必实际绘制图像,分配它然后进行所有者绘制就足够了。它看起来像例如this screenshot 后台的列表(这是我用 .NET 编写的 CMS)。

【讨论】:

  • 我尝试了图像列表,它可以工作。问题是它保留了 imagelist 的原始大小(高度)。当我更改 imagelist 的大小时,不会更改项目的大小。你知道如何使用 imageList 的新大小来更新项目大小吗?
  • 好吧,我添加了一个内存生成的图像,其中包含所需的项目高度。例如。我创建了一个 1px x 40px 的空图像并将其添加到图像列表中。然后,我将把图像从一个完全独立的图像列表中实际显示
【解决方案2】:

你是对的。

实际上,当您更改 ImageList 中的 ImageSize 属性时,我看到 ImageList 变空了。所以对于您的问题,您必须再次用所需的 ImageSize 重新填充 ImageList。试试吧,它可以解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多