C#列表视图计数>;0但没有项目,这怎么可能呢
本文关键字:项目 怎么可能 视图 列表 gt | 更新日期: 2023-09-27 18:08:41
再次被这个列表视图对象所困扰。当我试图从windows窗体的列表视图中检索所选的列表视图项时,我的代码抛出了一个"下标越界"错误
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个项目,代码的行为就像列表视图是空的一样。我尝试过对索引进行硬编码,但也没有成功。
我为这个表单的构造函数编写的代码listview在下面
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();
}
this.SearchResults.SelectedIndices[0]
将在每次没有选择时抛出,因为SelectedIndices
为空,因此没有第一个元素。this.SearchResults.SelectedIndices.Count
的值是多少?您的索引必须介于0和该值-1之间。
编辑:好的,在MSDN文档中找到这个:
注意从未显示的列表
如果您的ListView从未已绘制(例如,它在TabControl中,在尚未绘制的选项卡中尚未选择(。在这种情况下,SelectedItems和父ListView的SelectedIndices未正确更新,并且将仍然是空的。
第二版:这很有趣,但不相关。正如@nolonar所指出的,SelectedIndices
包含引用所有项目的索引,而不是所选项目,因此值5不是指第五个选择项目(因为可能只有一个(,而是指整个第五个项目。
问题在于:
this.SearchResults.SelectedItems[this.SearchResults.SelectedIndices[0]]
应该是这样的:
this.SearchResults.Items[this.SearchResults.SelectedIndices[0]]
如果您只选择了一个项目,如果您尝试访问0
以外的索引,SelectedItems
将只包含一个元素,并将引发异常
您可能需要使用
this.SearchResults.Items[4]
选择第5项。
当您使用列表的SelectedItems
时,它只返回选定的项目。在所选项目集合中,当你调用它时,第5个项目可能不在那里。因为可能没有任何选择,或者一个项目只能选择一个。