Как обновить элемент в ListBox в приложении WindowsForm в C # - PullRequest
0 голосов
/ 17 октября 2018

Я создал приложение Windows Form, в котором есть ListBox для отображения элементов.Когда я нажимаю на элемент, он выбирается, поскольку я реализовал метод lst_items_SelectedIndexChanged(), и значения загружаются в элементы управления для обновления.Но когда я изменяю значение из элементов управления для обновления, выбранный индекс также вызывается и выдает Index Out of Bounds -1 Exception.

Вот мой SelectedIndexChanged Code :

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 голосов
/ 17 октября 2018

Сохраните это в 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();
 }
...