我在 ListViews 上苦苦挣扎了一段时间...我正在编写一个无法复制到这里的程序(它有 637 行长)...基本上我正在尝试删除 ListView 的选定行...但是如果ListView 足够大,可以显示一个滚动条,它追逐程序说“没有为对象的实例设置对象引用”,它实际上并没有完全崩溃,但它显示了一个丑陋的 JIT 调试窗口。我知道问题出在 ListView 的大小上,因为如果我只是尝试使用活动滚动条删除 ListView 的任何项目,我就会崩溃,但是如果我只是将窗口的大小调整到足够大以禁用滚动条(即足够大,所以一切都适合,滚动条不是必需的,因此系统不会制作滚动条),一切正常!
(我已经尝试过各种代码来删除选定的项目,每个代码都有同样的错误,但我通过将所有 ListView 复制到一个数组,删除数组中的选定项目,然后复制它们使其工作回到一个干净的 ListView ......奇怪,凌乱,丑陋,我知道,但它是唯一有效的代码......但现在我得到了同样的错误,但只有在安装程序之后,当我没有发生这种情况时在 Visual Studio 中运行程序!)
编辑:删除代码是(注释部分是我之前尝试过的所有代码,但在同一个错误中失败了......这个只在安装时崩溃,而不是在 Visual Studio 2010 中......框架是 .NET 4.0):
private void limparLinhasSelecionadas()
{
if (listView1.Items.Count > 0 && limpando == false)
{
limpando = true;
int i = 0;
//for (i = listView1.Items.Count - 1; i >= 0 ; i--)
//{
//if (listView1.Items[i].Selected == true)
//{
// listView1.Items[i].Remove();
//}
//}
//////for (i = listView1.SelectedIndices.Count - 1; i >= 0; i--)
//////{
////// listView1.Items[listView1.SelectedIndices[i]].Remove();
//////}
//foreach (ListViewItem item in listView1.SelectedItems)
//{
// listView1.Items.Remove(item);
//}
ArrayList itens = new ArrayList();
foreach (ListViewItem item in listView1.Items)
{
itens.Add(item);
}
foreach (ListViewItem item in listView1.SelectedItems)
{
itens.Remove(item);
}
listView1.Items.Clear();
foreach (ListViewItem item in itens)
{
listView1.Items.Add((ListViewItem)item.Clone());
}
//for (i = 0; i < itens.Count; i ++)
//{
// ListViewItem item = new ListViewItem((itens[i] as ListViewItem).Text);
// for (j = 1; j < (itens[i] as ListViewItem).SubItems.Count; j++)
// {
// item.SubItems.Add((itens[i] as ListViewItem).SubItems[j].Text);
// }
// listView1.Items.Add(item);
//}
for (i = 0; i < listView1.Items.Count; i++)
{
listView1.Items[i].Text = "Passe " + (i + 1).ToString();
}
////ListView listView = new ListView();
////int j = 0;
////for (i = 0; i < listView1.Items.Count; i++)
////{
//// //listView.Items.Add(listView1.Items[i]);
//// for (j = 0; j < listView1.Items[i].SubItems.Count; j++)
//// {
//// listView.Items[i].SubItems.Add(listView1.Items[i].SubItems[j].Text);
//// }
////}
////listView1.Items.Clear();
////for (i = 0; i < listView.Items.Count; i++)
////{
//// listView1.Items.Add(listView.Items[i].Clone() as ListViewItem);
////}
//foreach (ListViewItem item in listViewCollection)
//{
// listView1.Items.Add(item.Clone() as ListViewItem);
//}
SetWindowTheme(listView1.Handle, "Explorer", null);
limpando = false;
}
// SetWindowTheme(listView1.Handle, "Explorer", null);
}