1

我想知道...我有一个 WinForms System.Windows.Forms.ListView 和一堆我正在使用 View.List 样式绘制的 ListViewItems。每个 ListViewItem 都有一个“SmallIcon”,我从 ListView 的 SmallImageList 中获取。

我的问题是图标显示得太靠近左侧的边框。我试图更改边界和 ListViewItem 的 Position 属性无济于事。

无论如何对 ListViewItems 有某种偏移量吗?

4

7 回答 7

3

Win32 listview 控件没有任何设置来增加图标和标签之间的空间(在任何视图中,不仅仅是列表)。设置在视图ListViewItem.Position中时不执行任何操作。ListViewList

一个技术含量低的解决方案是简单地在每个 ListViewItem 的Text值前面加上一个空格。有点难看,但是很容易做到。

如果你真的想拥有像素级控制,你将不得不拥有它。与往常一样,如果您使用 .NET ListView 进行任何操作,ObjectListView会使所有者绘制您的项目变得微不足道。

于 2009-09-24T22:11:46.123 回答
2

如前所述,在所有项目的文本前加上空格是添加填充的超级简单方法。然而,这有一个相当大的缺点。一旦执行此操作,您将失去在 ListView 中查找项目的能力,只需在 ListView 获得焦点时开始键入它们的名称即可。

于 2014-04-05T07:45:45.230 回答
1

尝试在小图像的左侧添加空白。

如果您使用 16x16 图像更改为 24x16,例如通过在左侧添加 8 个白色(或 ListView 背景颜色)像素。

于 2009-09-24T16:32:12.807 回答
1

如果您在 ListView View LargeIcons 中,则可以使用 item.position 发布文本

于 2010-04-13T06:45:27.843 回答
0

一个屏幕截图将是一个很好的例子,可以准确地看到你所追求的。

有趣的事情... Windows 资源管理器使用 ListView 来显示文件和文件夹。我通常在报告或详细信息模式下运行我的视图。我刚刚将其切换到列表视图模式,并查看您所描述的确切问题!哎呀。可能是 Win32 对象和特定视图类型的错误!

一个快速的解决方法可能是使用单列的 ListView 的报告样式,或者自己实现一些东西。.Net 中的 FlowLayoutPanel 可以很好地作为自定义列表视图的起点。

于 2009-09-24T16:32:36.147 回答
0

当您使用该View.List样式时,我怀疑您需要实现一些自定义绘图或考虑填充您的图像。您还可以查看覆盖 ListView 控件并通过覆盖SetBoundsCoreSetClientSizeCore(或类似)操作它的边界。

但是,如果ListView已设置为View.Details查看,则可以使用以下ListViewItem.IndentCount属性来完成:

仅当包含 ListView 的 View 属性设置为 Details,并且设置了 ListView 的 SmallImageList 属性时,才能使用 IndentCount 属性。资料来源:MSDN

于 2009-09-24T16:45:01.863 回答
0

如果设置 StateImageList 属性,则可以在图标前添加 16 px 的空间。我认为您可以通过将具有匹配宽度的图像作为第一个条目加载到 StateImageList 来调整这个额外的空间。但我没有测试过这个。

该线程 讨论了相反的问题。

于 2014-12-03T09:23:42.437 回答