回答
ListView
控件本身不支持子項目中的圖像。最簡單的做法是切換到DataGridView
並使用DataGridViewImageColumn
。如果這不可行,那麼您需要使用ListView
控件中的自定義繪圖支持自己繪製圖標。要執行此操作,請設置ListView.OwnerDraw = true
並處理ListView.DrawSubItem
和ListView.DrawColumnHeader
事件。
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// Only interested in 2nd column.
if (e.Header != this.columnHeader2)
{
e.DrawDefault = true;
return;
}
e.DrawBackground();
var imageRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height);
e.Graphics.DrawImage(SystemIcons.Information.ToBitmap(), imageRect);
}
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
對此沒有.NET支持。
繼承ListView和繪製自己的圖標。
public class MyListView : ListView
{
protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
{
base.OnDrawSubItem(e);
}
}
使用的P/Invoke和發送LVM_SETITEM消息列表視圖(您應設置在創建控件或通過LVM_SETEXTENDEDLISTVIEWSTYLE LVS_EX_SUBITEMIMAGES風格),指定的分項指數和相應的圖像索引。您需要爲插入的每個列表項目執行此操作。
ObjectListView是.NET Winforms ListView的開源包裝。它使用@ ligget78提到的p/invoke策略支持子項目上的圖像。它也解決了ListView的許多其他常見問題。
它可以讓您以最小的努力做出非常漂亮的列表視圖:
alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png
在此乘坐戰利品:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/
除了公認的答案,你應該也處理DrawItem事件,否則它將不起作用。
圖標顯示在「第一個」列中,這也是鍵盤前綴搜索的基礎。一種可能的解決方案可能是通過將第一列的DisplayIndex設置爲其他值來對列進行重新排序。
listView1.Columns[0].DisplayIndex = 1;
這當然只適用於只需要一列中的圖標。
- 1. 如何設置提示爲ListviewSubItem
- 2. 如何在Windows Mobile中設置ListViewSubItem BackColor?
- 3. 如何爲QML Plasmoid設置圖標
- 4. 如何爲DownloadManager請求設置圖標?
- 5. 如何爲Vizframe圖表設置標題?
- 6. 如何設置圖標爲JFrame
- 7. 如何爲ipad和iphone設置圖標?
- 8. 如何將圖標設置爲getbase FloatingActionsMenu
- 9. 如何爲ActionBar Overflow設置contentDescription圖標
- 10. 如何設置圖標onCreateContextMenu
- 11. 如何在Flash CS5中爲Air設置設置圖標?
- 12. 如何爲maptoolbar的導航圖標設置位置座標?
- 13. 如何將Android標題圖標設置爲下載圖像
- 14. 設置爲全局圖標
- 15. 如何爲Facebook設置打開圖標標記按鈕?
- 16. 如何在Android中將標記設置爲Google地圖標記?
- 17. 如何爲每個標記設置不同的圖標?
- 18. 將圖標設置爲JApplet標題欄
- 19. 如何爲應用程序設置圖標圖像?
- 20. 如何爲擺動應用程序設置圖標圖像?
- 21. 如何將圖像圖標設置爲JButton
- 22. 如何將文件夾圖標設置爲JPEG圖像?
- 23. 如何設置.exe文件的圖標?
- 24. 如何設置一個dll的圖標?
- 25. 如何設置XUL窗口的圖標?
- 26. 如何設置tablayout圖標使用fontawesome
- 27. 如何設置選擇圖標大
- 28. 如何使用溢出設置圖標
- 29. C#如何設置文件夾圖標?
- 30. 如何設置圖像的GPS座標?
爲什麼不只是'var imageRect = e.Bounds;'它是一個值類型,所以值將被複制並且不被引用使得它們可以安全地處理。 – ja72
在現實世界的用法中,您可能需要調整imageRect以考慮對齊,填充和/或子項中包含的其他內容。 –