首页 > 解决方案 > 如何在 C# 中的 WindowsForm 应用程序中更新 ListBox 中的项目

问题描述

我创建了一个 Windows 窗体应用程序,其中有一个 ListBox 来显示项目。当我单击一个项目时,它被选中,因为我已经实现了lst_items_SelectedIndexChanged()方法,并且值被加载到要更新的控件中。但是,当我从控件更改值以更新也称为和 throws 中的选定索引时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);

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

标签: winformslistboxselecteditemlistboxitemselectedindexchanged

解决方案


将其存储在 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();
 }

推荐阅读