C #: обновление списка в режиме реального времени

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

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

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

Я долго искал, но пока никто не знает, как это сделать. :П

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

} 
 Grant Peters21 сент. 2010 г., 06:10
Когда вы «редактируете» вопрос небольшим дополнительным вопросом, не переписывайте его целиком, в противном случае предыдущие ответы не имеют смысла, а новички понятия не имеют, о чем вы говорите. Просто добавьте ваши правки в конец и конец исходного вопроса.

Ответы на вопрос(3)

Решение Вопроса

понял, вы хотите изменить выбранный в выпадающем списке элемент во время выполнения. В этом случае вы можете использовать событие 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;
    }
 default locale21 сент. 2010 г., 05:55
Перепроверил, это моя вина. Я проверю рабочее решение
 Nick20 сент. 2010 г., 14:13
Ты самый лучший! Этот код работает, наконец! Единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что она обновляет только первый измененный символ. Так что, если я использую Backspace где-нибудь, он обновляется, а затем мне нужно перезапустить, прежде чем он снова обновится. Кроме того, он пойдет в крайнюю левую часть строки со списком, что может быть довольно раздражающим. Если кто-нибудь знает, как это исправить, я был бы очень благодарен.
 default locale21 сент. 2010 г., 06:04
Ответ обновлен. Надеюсь, поможет.

привязать к этой собственности?

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

 Nick20 сент. 2010 г., 13:36
Извините, но я использую Visual Studio 2008 Express Edition, и у меня нет доступа ни к чему другому в данный момент. Итак, я не думаю, что я могу использовать WPF? -Извините, я немного новичок во всем этом, я еще не много программировал на C #.
 Martin Hennings20 сент. 2010 г., 16:36
Я использую Visual C # 2008 Express Edition, и я могу выбрать Файл -> Новый проект -> Приложение WPF. Около 6 месяцев назад я запустил проект в WPF с большим количеством кода «someElement_Click» и «Panel.Children.Add (new Button ())», но затем научил себя некоторымMVVM, Это было большим облегчением - пришлось писать больше кода в некоторых местах, но все стало достаточно структурированным.

у меня было поле со списком 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

Ваш ответ на вопрос