W ListView możesz mieć ikony na każdym elemencie.
Podczas wyświetlania w trybie Szczegóły ikona jest wyświetlana w kolumnie po lewej stronie.Jak ustawić ikonę dla ListViewSubItem?
Czy mogę wyświetlić ikonę w innej kolumnie?
W ListView możesz mieć ikony na każdym elemencie.
Podczas wyświetlania w trybie Szczegóły ikona jest wyświetlana w kolumnie po lewej stronie.Jak ustawić ikonę dla ListViewSubItem?
Czy mogę wyświetlić ikonę w innej kolumnie?
Sterowanie ListView
nie obsługuje obrazów w podpunktach natywnie. Najłatwiejszą rzeczą jest przełączenie na DataGridView
i użycie DataGridViewImageColumn
. Jeśli nie jest to możliwe, musisz narysować ikony samodzielnie za pomocą niestandardowego wsparcia rysowania w formancie ListView
. Aby to zrobić, należy ustawić ListView.OwnerDraw = true
i obsługiwać zdarzenia ListView.DrawSubItem
i 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;
}
Nie ma wsparcia .NET dla tego.
Dziedziczenie z ListView i wyciągnąć własne ikony.
public class MyListView : ListView
{
protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
{
base.OnDrawSubItem(e);
}
}
Zastosowanie P/Invoke i wysłać LVM_SETITEM wiadomość do ListView (należy ustawić styl LVS_EX_SUBITEMIMAGES na tworzenie sterowania lub poprzez LVM_SETEXTENDEDLISTVIEWSTYLE) określ indeks podpunkt i odpowiedni indeks obrazu. Będziesz musiał to zrobić dla każdego wstawianego elementu listy.
ObjectListView to otoki open source wokół .NET WinFort ListView. Obsługuje obrazy w podelementach przy użyciu strategii p/invoke, o której wspomniał @ ligget78. Rozwiązuje również wiele innych typowych problemów z ListView.
To pozwala na wykonywanie bardzo estetyzacja ListViews przy minimalnym wysiłku:
alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png
Take a łupy w tym:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/
Oprócz przyjętej odpowiedź, ty powinien również obsługiwać zdarzenie DrawItem, lub nie będzie działać.
Ikona jest wyświetlana w kolumnie "pierwszy" i jest to również podstawa do wyszukiwania prefiksu klawiatury. Jednym z możliwych rozwiązań może być zmiana kolejności kolumn poprzez ustawienie DisplayIndex pierwszej kolumny na coś innego.
listView1.Columns[0].DisplayIndex = 1;
To oczywiście działa tylko wtedy, gdy potrzebujesz ikony w jednej kolumnie.
dlaczego nie tylko 'var imageRect = e.Bounds;' Jest to typ wartości, więc wartości będą kopiowane i nieodwoływane, aby były bezpieczne w obsłudze. – ja72
Ekspozycja, w realnym świecie, możesz dostosować imageRect, aby uwzględnić wyrównanie, dopełnienie i/lub dodatkową zawartość zawartą w podteście. –