所以我試圖克隆我的ListView
這樣我最終得到一個新的ListView
與舊的屬性,但沒有舊的項目(同時避免任何引用回到舊的)。閱讀ListView的屬性後看到的奇怪行爲
private ListView generateEmptyClone(ListView toClone)
{
ListView newCopy = new ListView();
foreach (var propToClone in toClone.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
PropertyInfo propInfo = newCopy.GetType().GetProperty(propToClone.Name);
if (propInfo.CanWrite && propInfo.Name != "TopItem") // TopItem causing problems
propInfo.SetValue(newCopy, propToClone.GetValue(toClone, null));
}
foreach (ColumnHeader head in toClone.Columns)
{
newCopy.Columns.Add((ColumnHeader)head.Clone());
}
return newCopy;
}
上面的方法工作完全正常,但是當我回到原來的ListView
並執行:
string[] customerToAdd = { "To IBT", customerName, contactNum, date, SKU, itemDescription,
emp, emp, emp, emp, emp};
var listViewItem = new ListViewItem(customerToAdd);
listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
TableDisplay.Items.Insert(0, listViewItem);
我得到的錯誤:
Exception:Thrown: "InvalidArgument=Value of '-1' is not valid for 'index'." (System.ArgumentOutOfRangeException) A System.ArgumentOutOfRangeException was thrown: "InvalidArgument=Value of '-1' is not valid for 'index'."
所以我創建了一個方法比較原始ListView
在複製其屬性前後的屬性,唯一的區別是CanSelect
,Created
和Visible
已從True更改爲False。
任何想法,爲什麼它這樣表現?
你可以提供用於創建'myListViewItem'的代碼嗎? – jaredbaszler
@jaredbaszler我修改了帖子 – galacticfan
我在這裏沒有看到任何不合適的東西。也許檢查你在克隆後克隆的克隆列表中有多少列。另外,-1通常在找不到任何東西時通過某種查找函數返回。例如,如果您正在爲一個項目搜索一個ListBox或一個數組,並且它沒有找到它。如果您正在查找某個內容,然後嘗試將其插入索引爲-1的索引,則該索引無效。檢查您的索引,並確保它們都是有效的。這相當容易調試。 – jaredbaszler