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

How to update item in ListBox in WindowsForm Application in C#

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

知道如何在不让异常索引越界的情况下进行更新吗? 问候

将其存储在一个整数中

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