假設我建立ListView
與下面的代碼:ListViewItem的隱式添加ListViewSubItem
ListViewItem item1 = new ListViewItem();
item1.Text = "item1";
item1.SubItems.Add(new ListViewItem.ListViewSubItem(item1, "subitem1"));
item1.SubItems.Add(new ListViewItem.ListViewSubItem(item1, "subitem2"));
listView1.Items.Add(item1);
但實際上它會創建3個ListViewSubItem
就像這樣:
ListViewItem
|
-------------------------------------
| | |
ListViewSubItem ListViewSubItem ListViewSubItem
(Text=item1) (Text=subitem1) (Text=subitem2)
在我真正的程序中,我使用衍生自子項目來自ListViewItem.ListViewSubItem
和OwnerDraw = true
ListViewItem item1 = new ListViewItem();
CustomListViewSubItem subitem1 = new CustomListViewSubItem(item1, "subitem1");
CustomListViewSubItem subitem1 = new CustomListViewSubItem(item1, "subitem1");
listView1.Items.Add(item1);
和上述行爲打破了所有的邏輯,同時在鑄造事件DrawSubItems
:
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
ListViewItem item = e.Item;
ListViewItem.ListViewSubItem subitem = item.SubItems[e.ColumnIndex];
CustomListViewSubItem customsubitem = (CustomListViewSubItem)subitem; // <- System.InvalidCastException here
...
}
肯定會失敗僅適用於第一個子項目這實際上是項目,但是這不是我想要的。我如何避免這種行爲,並只創建2個我需要的子項?
你有可能,如果新的實例時檢查'ListViewItem'子項列表是空的?也許它只是在初始化時添加一個標準子項? –
檢查'ListViewItem'文檔https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.subitems(v=vs.110).aspx它說第一個項目總是父項。 – Mats391