我创建了一个Windows窗体应用程序,其中有一个用于显示项目的列表框。当我单击某个项目时,它会因为我已实现lst_items_SelectedIndexChanged()
方法而被选中,并且值已加载到控件中以进行更新。但是,当我更改控件中的值以更新选中的索引时,也会调用并抛出Index Out of Bounds -1 Exception
。
这是我的 SelectedIndexChanged代码:
private void lst_items_SelectedIndexChanged(object sender, EventArgs e)
{
ShoppingItem myItem = new ShoppingItem();
if (lst_items.SelectedIndex > -1)
{
myItem = itemManager_obj.GetItem(lst_items.SelectedIndex);
txt_amount.Text = myItem.amount.ToString();
txt_description.Text = myItem.description;
cmb_units.SelectedIndex = (int)myItem.unit;
}
}
这是我的更新(更改)按钮代码:
private void btn_change_Click(object sender, EventArgs e)
{
ShoppingItem itemToChange = new ShoppingItem();
itemToChange = itemManager_obj.GetItem(lst_items.SelectedIndex);
bool success = false;
itemToChange = ReadIput(out success);
if (success)
{
success = itemManager_obj.ChangeItem(itemToChange,lst_items.SelectedIndex);
lst_items.Items.RemoveAt(lst_items.SelectedIndex);
lst_items.Items.Insert(lst_items.SelectedIndex, itemManager_obj.ToString());
UpdateGUI();
}
}
我不确定为什么在执行以下代码行后在更新时调用SelectedIndexChanged
:
lst_items.Items.RemoveAt(lst_items.SelectedIndex);
任何想法如何在不使异常索引超出范围的情况下进行更新? 问候
答案 0 :(得分:0)
将此存储为int
lst_items.Items.RemoveAt(lst_items.SelectedIndex);
然后做
lst_items.Items.Insert(your int, itemManager_obj.ToString());
您收到此错误是因为删除selectedIndex
之后,由于该项目不存在,因此不再选择该项目。
if (success)
{
int indexer=lst_items.SelectedIndex;
success = itemManager_obj.ChangeItem(itemToChange,lst_items.SelectedIndex);
lst_items.Items.RemoveAt(indexer);
lst_items.Items.Insert(indexer, itemManager_obj.ToString());
UpdateGUI();
}