C #: обновление списка в режиме реального времени - PullRequest
5 голосов
/ 20 сентября 2010

Я пытался загрузить текстовый файл в комбинированный список, а затем сделал кнопку, чтобы сохранить все изменения, которые я внес в этот комбинированный список, обратно в текстовый файл.

Проблема в том, что когда я что-то набираюв моем выпадающем списке выбранный «элемент» не обновляется.Я могу изменить предложение, но как только я нажимаю кнопку «Сохранить», которая также обновляет комбинированный список, он возвращается к тому моменту, когда я его редактировал.

Кроме того, когда я редактирую комбинированный список и нажимаю раскрывающийся список- стрелка, он показывает содержание текстового файла, еще раз без моего отредактированного предложения.

Я уже некоторое время искал, но пока никто не знает, как это сделать.: P

private void cbBanken_SelectedValueChanged(object sender, EventArgs e)
{
    this.cbBanken.Update();
}

Я думал, что-то подобное может сработать, но это ничего не делает.Мне удалось добавить новый элемент в список после его изменения, но это не то, что я хочу.Я хочу иметь возможность редактировать элементы, а не добавлять новые.

Надеюсь, это достаточно подробно.Спасибо за ваше время!

Редактировать: Хорошо, просто еще одна вещь: «Он будет обновлять только первый символ, который я изменяю. Так что, если я использую Backspace где-либо, он обновляется, а затем мне нужно перезагрузить перед нимбудет обновляться снова. Кроме того, он пойдет в крайнее левое положение строки со списком, что может быть довольно раздражающим. Если кто-нибудь знает, как это исправить, я был бы очень благодарен. "

Яв настоящее время используется этот код:

private void comboBox1_TextChanged(object sender, EventArgs e) 
{ 
    if(comboBox1.SelectedIndex>=0) 
    { 
        int index = comboBox1.SelectedIndex; 
        comboBox1.Items[index] = comboBox1.Text; 
    } 

} 

Ответы [ 3 ]

3 голосов
/ 20 сентября 2010

Метод ComboBox.Update просто перерисовывает область со списком. Как я понял, вы хотите изменить выбранный в выпадающем списке элемент во время выполнения. В этом случае вы можете использовать событие TextUpdate. Выбранный индекс Combobox автоматически останавливает редактирование. Так что есть и другой способ. Отслеживание изменения стоимости. Вот фрагмент кода:

    private int editedIndex = -1;
    private String editString = "";
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (editedIndex == comboBox1.SelectedIndex) return;
        if(editedIndex>0) comboBox1.Items[editedIndex] = editString; //Change the previous item
        if(comboBox1.SelectedIndex>=0)         //get new item parameters
        {
            editedIndex = comboBox1.SelectedIndex;
            editString = comboBox1.Items[editedIndex].ToString();
        }
    }


    private void comboBox1_Leave(object sender, EventArgs e)
    {
        if(editedIndex>=0)
            comboBox1.Items[editedIndex] = editString;
    }

    private void comboBox1_TextUpdate(object sender, EventArgs e)
    {
        if (editedIndex >= 0)
        {
            editString = comboBox1.Text;
        }
    }

    private void comboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.KeyData==Keys.Enter&&editedIndex>=0)
            comboBox1.Items[editedIndex] = editString;
    }
0 голосов
/ 03 декабря 2015

У меня просто была похожая проблема: у меня было поле со списком Winforms, VB.Net, Style = DropDown, и я хотел, чтобы изменения в окне редактирования изменили фактический элемент списка.

У меня также было несколько комбоящики, которые я хотел иметь такое же поведение.

Вот как я адаптировал подход выше:

Public Class frmDocEntry
    ...
    Private lastIdx As Integer = -1
    ...
    Private Sub cbAnyMV_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbRGBStringMV.Enter, cbRGBIntegerMV.Enter, cbRGBFloatMV.Enter, cbRGBDateMV.Enter
        ' comboBox.SelectedIndex will get *reset* to -1 by text edit
        lastIdx = sender.SelectedIndex
    End Sub

    Private Sub cbAnyMV_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbRGBStringMV.Leave, cbRGBIntegerMV.Leave, cbRGBFloatMV.Leave, cbRGBDateMV.Leave
        If lastIdx >= 0 Then
            sender.Items(lastIdx) = sender.Text
        End If
        lastIdx = -1
    End Sub

    Private Sub cbAnyMV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbRGBStringMV.SelectedIndexChanged, cbRGBIntegerMV.SelectedIndexChanged, cbRGBFloatMV.SelectedIndexChanged, cbRGBDateMV.SelectedIndexChanged
        lastIdx = sender.SelectedIndex
    End Sub
0 голосов
/ 20 сентября 2010

Что делать, если вы создаете свойство в выделенном коде и связываетесь с этим свойством ?

Первый выигрыш - лучшая возможность отладки, второй выигрыш - то, что вы можете решить, что делать при получении / установке данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...