gpt4 book ai didi

C# listview count >0 但没有项目这怎么可能?

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:42 25 4
gpt4 key购买 nike

再次被这个 ListView 对象弄糊涂了。当我尝试从 Windows 窗体的 ListView 中检索选定的 listviewitem 时,我的代码出现了“下标越界”错误。使用 VS add watch 命令,我看到以下内容当我查看 listview 对象的 watch 时,我看到以下内容

this.SearchResults  {System.Windows.Forms.ListView, Items.Count: 52, Items[0]: ListViewItem: {0}}   System.Windows.Forms.ListView

所以我看到 52 的计数是正确的,当程序运行时我可以从集合中选择一行。例如,假设我从集合中选择了第 5 个项目。 watch 将返回以下内容

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 看起来是空的一样。我试过对索引进行硬编码,但也没有用。

我的这个表单 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();
}

更新

下面是抛出异常的代码。 ListView 是相同的形式

 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 docs 中找到了这个:

Beware of never-shown lists

The Selected property cannot be trusted if your ListView has never been drawn (for example, it's in a TabControl, in a tab that has not been selected yet). In that case, the SelectedItems and SelectedIndices of the parent ListView are not correctly updated and will still be empty.

EDIT2:这很有趣但不相关。正如@nolonar 指出的那样,SelectedIndices 包含引用所有项目的索引,而不是选定项目,因此值 5 不是指第五个选择项目(因为可能只有一个),而是指总体上的第五个项目。

关于C# listview count >0 但没有项目这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com