2012-01-31 68 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