有時候, 想用Listbox顯示一個列表, 但只有文字列表太單調, 想加個圖示表示分類或狀態. 不過Listbox不允許這麼做, 就用一個Listview假裝成有圖示的Listbox吧.
ListView跟ListBox不一樣, ListView沒有data bind, 要自己寫迴圏做資料綁定
至於圖示, 為了簡化, 利用ImageList做儲存媒體.
foreach(Item m in items)
{
ListViewItem item = new ListViewItem(someText);
item.ImageIndex = 0;
item.Tag = m;
listView.Items.Add(item);
}
listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
把每一個items裡的item, 加入到ListView. 並選擇要用甚麼圖示.
然後由於ListView的item跟ListBox不同, 沒有綁定object, 所以Tag屬性儲存來代替.
最後用AutoResizeColumns自動校正寬度
要在某個項目被選擇時觸發邏輯時, 用SelectIndexChanged事件
private void ltvMonitor_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView.FocusedItem != null)
{
Item m = (Item)listView.FocusedItem.Tag;
// do something with it
}
}
FocusedItem即被選擇的項目, 從Tag屬性取回物件.