设置selecteditem.使用VirtualMode在listview中计数异常



在选择列表视图中的值并单击我的按钮后,我想将我的值放入代码中,但我的代码抛出了这个异常:

Count = 'this.listView1.SelectedItems. 'Count抛出了一个类型为System的异常。InvalidOperationException '

private void OK_button_Click(object sender, EventArgs e)
{
try
{
// OK -> Daten übernehmen
ListView.SelectedListViewItemCollection data = this.listView1.SelectedItems;
int iCount = data.Count;
if (iCount != 1)
{
MessageBox.Show("Value is empty");
return;
}
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
//WriteProtokoll(ex.ToString(), 0);   
Close();
}
}
} 
private void listView1_SearchForVirtualItem(object sender, SearchForVirtualItemEventArgs e)
{
e.Index = Array.FindIndex(myData, s => s == textBox1.Text.ToString());
}
private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = new ListViewItem(myData[e.ItemIndex]);

}
myData = new string[dataListSize];
for (int i = 0; i < dataListSize; i++)
{
myData[i] = String.Format("{0}", i);
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
String MyString = textBox1.Text.ToString();  
ListViewItem lvi = listView1.FindItemWithText(MyString.TrimEnd());
//Select the item found and scroll it into view.
if (lvi != null)
{
listView1.SelectedIndices.Clear();
listView1.SelectedIndices.Add(lvi.Index);
listView1.EnsureVisible(lvi.Index);
}
}

这是您使用VirutalMode时的设计。文档说明:

在虚拟模式下,Items收集被禁用。试图访问它会导致InvalidOperationException。也是如此CheckedItems集合和SelectedItems集合.

我们可以在源代码中确认这一点。

它继续提供以下建议:

如果要检索选中或选中的项,请使用SelectedIndices和CheckedIndices集合。

因此,您应该使用this.listView1.SelectedIndices.Count

再次查看源代码,我们可以看到这不会抛出异常。

最新更新