再次被这个 listview 对象迷惑了。当我尝试从 Windows 表单中的列表视图中检索选定的列表视图项时,我的代码会出现“下标越界”错误。使用 VS add watch 命令,我看到以下内容当我查看 listview 对象的手表时,我看到以下内容
this.SearchResults {System.Windows.Forms.ListView, Items.Count: 52, Items[0]: ListViewItem: {0}} System.Windows.Forms.ListView
所以我看到 52 的计数是正确的,当程序运行时,我可以从集合中选择一行。例如,假设我从集合中挑选了第 5 个项目。手表将返回以下内容
this.SearchResults.SelectedIndices[0] 5 int
因此,对于索引,我只想将 listviewitem 传递给另一个对象以进行进一步处理。当我尝试这个时,我得到一个运行时错误
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll
Additional information: InvalidArgument=Value of '5' is not valid for 'index'.
这怎么可能?我有 52 个项目,代码的行为好像列表视图是空的。我曾尝试对索引进行硬编码,但这也不起作用。
我的此表单的构造函数代码列表视图如下
public ResultsDisplay(List<MATS_Doc> foundDocs)
{
InitializeComponent();
this.CenterToScreen();
this.SearchResults.Columns.Add("Title");
this.SearchResults.Columns.Add("Stuff");
foreach (MATS_Doc doc in foundDocs)
{
// retrieve coresponding document
// create new ListViewItem
ListViewItem searchResults = new ListViewItem(doc.Id.ToString());
searchResults.SubItems.Add(doc.Title);
searchResults.SubItems.Add(doc.Stuff);
// add the listviewitem to a new row of the ListView control
this.SearchResults.Items.Add(searchResults); //show Text1 in column1, Text2 in col2
}
foreach (ColumnHeader column in this.SearchResults.Columns)
{
column.Width = -2;
}
this.Show();
}
更新
下面是引发异常的代码。列表视图的形式相同
if (scoredListing == null)
{
DocumentView showdoc = new DocumentView(this.SearchResults.SelectedItems[this.SearchResults.SelectedIndices[0]]);
showdoc.ShowDialog();
}