如何在C#中的WindowsForm应用程序中更新列表框中的项目

时间:2018-10-17 16:58:39

标签: winforms listbox selecteditem listboxitem selectedindexchanged

我创建了一个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);

任何想法如何在不使异常索引超出范围的情况下进行更新? 问候

1 个答案:

答案 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();
 }