C#之ListView開啟虛擬模式,報錯:其他資訊: 處於 VirtualMode 中時,ListView RetrieveVirtualListItem 事件需要每個 ListView 列的列表檢視
阿新 • • 發佈:2018-12-31
二〇一八年十一月十日 21:54:49
1、環境: VS 2010 + C# + ListView虛擬模式 + winform
2、報錯:
其他資訊: 處於 VirtualMode 中時,ListView RetrieveVirtualListItem 事件需要每個 ListView 列的列表檢視子項。
3、原因:
滿足 : 【 ListView的初始化設定的列數為A, 新新增一行B,B的列數小於 A 】條件,就會報錯:
【 其他資訊: 處於 VirtualMode 中時,ListView RetrieveVirtualListItem 事件需要每個 ListView 列的列表檢視子項。
4、解決方案:
新增行的列數 B 滿足條件: B >= A 即可。
----------------錯誤 示範-----------------------
ListView初始設定的的列數為 8列,如下圖:
現在,新增列,程式碼如下:
/// add count of rows for (int i = 0; i < 200; i++) { ListViewItem item = new ListViewItem(); /// first column item.SubItems[0].Text = i.ToString(); /// and other columns for (int k = 1; k < 6; k++) { item.SubItems.Add(k.ToString()); } _listArrRecv.Add(item); } listView_recv.VirtualListSize = _listArrRecv.Count; listView_recv.Invalidate();
解釋程式碼:第一個for, 增加 200 行, 請注意, 程式碼中 新增 每一行 只有 6 列(item.SubItems[0].Text + 第二個for 迴圈),而listview初始化的列一共有 8 列。 執行程式碼,發現如下提示:
VS 的輸出框也提示:
------- 解決方案,如 第四步。將 新增行 程式碼改為如下(第二個for):
for (int k = 1; k < 8; k++)
完整增加行示例程式碼:
/// add count of rows for (int i = 0; i < 200; i++) { ListViewItem item = new ListViewItem(); /// first column item.SubItems[0].Text = i.ToString(); /// and other columns for (int k = 1; k < 6; k++) { item.SubItems.Add(k.ToString()); } _listArrRecv.Add(item); } listView_recv.VirtualListSize = _listArrRecv.Count; listView_recv.Invalidate();
---------------------- OK