以Listview代替Listbox, 做出有圖示的Listbox效果

  • 5944
  • 0

有時候, 想用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屬性取回物件.

My WP Blog with english technical docs.