ListView奇怪的异常

时间:2014-02-28 08:20:57

标签: c# listview compact-framework windows-ce

Windows CE 5.0,.NET Compact framework 3.5

我遇到过ListView控件的一个非常奇怪的行为。我扩展了ListView控件,如下所示:

public partial class MyListView : ListView
{
  public void Fill(IEnumerable<string[]> data)
  {
    BeginUpdate();
    Items.Clear();
    foreach (var d in data) {
      Items.Add(new ListViewItem(d));
    }
    EndUpdate();
  }
}

我有两个具有相同操作系统映像的类似设备。此代码适用于第一个设备,但它会在第二个设备的 Items.Add 处引发异常。每次都不会出现异常,但经常出现异常。 我无法理解问题出在哪里。你知道为什么会这样吗?

System.ArgumentOutOfRangeException was unhandled   Message="Exception" StackTrace:
       at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
       at System.Windows.Forms.ListView.ntvGetColumnHeaderWidth(Int32 iColumn)
       at System.Windows.Forms.ColumnHeader.get_Width()
       at System.Windows.Forms.ListViewItem.ListViewSubItem.Actualize(Int32 index)
       at System.Windows.Forms.ListViewItem.ListViewSubItemCollection.Actualize()
       at System.Windows.Forms.ListView.ListViewItemCollection.Insert(Int32 index, ListViewItem listViewItem)
       at System.Windows.Forms.ListView.ListViewItemCollection.Add(ListViewItem listViewItem)
       at MyNamespace.MyListView.Fill(IEnumerable`1 data)

有时我得到这样的例外:

System.ArgumentOutOfRangeException was unhandled
  Message="Specified argument was out of the range of valid values.\r\nParameter name: index"
  StackTrace:
       at System.Windows.Forms.ListViewItem.ListViewSubItem.Actualize(Int32 index)
       at System.Windows.Forms.ListViewItem.ListViewSubItemCollection.Actualize()
       at System.Windows.Forms.ListView.ListViewItemCollection.Insert(Int32 index, ListViewItem listViewItem)
       at System.Windows.Forms.ListView.ListViewItemCollection.Add(ListViewItem listViewItem)

1 个答案:

答案 0 :(得分:0)

这两行表明我可能是ListView标题的问题,你是在填充它之前加了它还是在添加项目之前定义它?

   at System.Windows.Forms.ListView.ntvGetColumnHeaderWidth(Int32 iColumn)
   at System.Windows.Forms.ColumnHeader.get_Width()