假设我建立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