2012-01-31 70 views
1

我使用ObjectListView在C#的WinForms项目,并希望以显示其中一列的小图标。如何将图像置于ObjectListView列中?

到目前为止,图标是显示得很好,但它不是在列居中,我无法找到涉及图像对准一列内的任何文档或代码。

Here are the instructions for displaying an image as the column contents

的代码几乎是一样给出的例子:

col_Important.AspectGetter = delegate(object x) { return ((ClassMyItem)x).IsImportant; }; 
col_Important.AspectToStringConverter = delegate(object x) { return String.Empty; }; 
col_Important.ImageGetter = delegate(object x) 
    { 
     return ((ClassMyItem)x).IsImportant? "star" : "none"; 
    }; 

有没有人处理这个问题,知道的一种方式,以中心的形象呢?

回答

5

在手工绘制的子项(使用DrawSubItem事件)的过程中,我无意中发现,只需将ObjectListView财产OwnerDraw设置为true,实际图像居中。

只要是明确的,这里是如何只用一个形象的列得出:

colName.AspectGetter = delegate(object x) { return ((MyClass)x).SomeProperty; }; 
colName.AspectToStringConverter = delegate(object x) { return String.Empty }; }; 
colName.ImageGetter = 
    delegate(object x) { return ((MyClass)x).SomeProperty ? "icon" : "none"; }; 

的ObjectListView有SmallImageList集中使用我为它创建ImageList中,这哪里是ImageGetter方法使使用图像名称(本例中为“图标”)。

默认情况下,图像在最左边的列拉,不管像文本对齐方式设置等

通过设置OwnerDraw为true ObjectListView,图像奇迹般地集中在色谱柱。没有任何其他的代码。这是意外的行为,可能值得进一步调查。现在它可以工作,所以也许这个提示也会帮助其他人。

+0

我无法删除[edit]注释,因为stackoverflow一直坚持编辑至少6个字符。有人可以删除该块。 – 2017-06-09 02:27:36

+0

@Xan你想做什么? – JYelton 2017-06-09 02:30:50

+0

我刚刚添加了两个分号并删除了一个大括号,但出现错误,我必须编辑至少6个字符。所以我想我补充一些废话和删除后,但算法太聪明/烦人:-) – 2017-06-09 02:32:21

0

如何关于图画它时(计算在x知道列边界)使得列表的OwnerDraw和中心图像。寻找一个例子现在..

这里:Center subitem Icon in ListView

希望它帮助。

+0

我看到链接的答案,并肯定想过这个问题。我希望可能有一个稍微简单的方法,因为我需要在几个地方应用此修复程序。 – JYelton 2012-02-02 21:22:49

+0

您可以继承OLV以获取所有列表的行为。 – vulkanino 2012-02-03 09:02:17