2009-09-24 65 views
1

我想知道...我有一個WinForms System.Windows.Forms.ListView與一堆ListViewItems,我使用View.List樣式繪製。每個ListViewItem都有一個「SmallIcon」,我從ListView的SmallImageList中獲取。C#ListView:ListViewItem偏移可能嗎?

我的問題是,圖標顯示太靠近左邊界。我試圖改變邊界和ListViewItem的Position屬性無濟於事。

無論如何有某種抵消ListViewItems?

+0

有沒有機會展示screeshot?靜是你的朋友:www.jingproject.com – balexandre 2009-09-24 22:14:33

回答

3

在Win32 ListView控件沒有任何設置,以提高圖標和標籤(在任何視圖,而不僅僅是列表)之間的空間。當ListViewList視圖中時,設置ListViewItem.Position什麼都不做。

一個低技術解決方案是簡單地將每個ListViewItem的Text值加上一個空格。有點醜,但很容易做到。

如果你真的想要像素級別的控制,你將不得不所有者繪製它。與往常一樣,如果您使用.NET ListView做任何事情,ObjectListView會使所有者繪製您的項目變得微不足道。

+0

我知道我花了很長時間來接受這個答案,但我最終最終以「一個空格」解決方案來爲每個ListViewItem的Text值添加前綴。它如你所說的那樣有效,但有點難看。 – SuperOli 2010-11-26 16:06:36

1

嘗試在小圖像的左側添加空白區域。

如果您將16x16圖像更改爲24x16,例如在左側添加8個白色(或ListView背景色)像素。

+0

但是有效!好的答案 – RvdK 2010-04-13 06:59:54

0

一個截圖將會很好的一個例子,看看你究竟是什麼。

有趣的事情... Windows資源管理器使用ListView來顯示文件和文件夾。我通常在Report或Detail模式下運行我的視圖。我只是將它切換到列表視圖模式,並看到你描述的確切問題!讓人驚訝。可能是Win32對象和特定視圖類型的錯誤!

一個快速的解決方法可能是爲ListView使用單個列的報告樣式,或者自己實現一些東西。 .Net中的FlowLayoutPanel作爲自定義列表視圖的起點將非常好地工作。

0

由於您使用的是View.List風格,我懷疑您需要實現一些自定義繪圖或考慮填充圖像。您也可以查看重寫ListView控件並通過重寫SetBoundsCoreSetClientSizeCore(或類似)來操縱它的界限。

但是,如果ListView被建立爲View.Details觀點,這可以使用ListViewItem.IndentCount屬性來完成:

只有當 包含ListView控件的視圖屬性是

的IndentCount屬性可用於 設置爲詳細信息, 和 ListView的SmallImageList屬性已設置。 來源:MSDN

+0

IndentCount以SmallImageList寬度的倍數工作。因此將IndentCount設置爲1,將文本縮進16像素(如果SmallImageList是16x16)。我認爲這超過@Superoli需要:) – Grammarian 2009-09-24 22:16:02

1

如果你在ListView中查看LargeIcons那麼你可以使用現在的位置item.position

2

如前所述,前綴所有項目的文本與空間是一個超級簡單的方法來添加填充的文本。然而,這具有相當顯着的缺點。一旦你這樣做了,你就失去了在ListView中查找項目的能力,只需在ListView具有焦點的時候開始輸入他們的名字即可。

0

如果設置了StateImageList屬性,則可以在圖標之前添加16像素的空間。我認爲你可以通過加載一個匹配寬度的圖像作爲StateImageList的第一項來調整這個額外的空間。但我沒有測試過這個。

This thread討論了相反的問題。