C # - изменение индекса Combobox после редактирования - PullRequest
0 голосов
/ 20 сентября 2010

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

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

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

Надеюсь, кто-то знает, почему он меняет индекс, и как это предотвратить.

Ответы [ 2 ]

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

По мере моего понимания проблемы, вы можете сделать одну вещь. В методе comboBox1_TextChanged вместо помещения предыдущего кода вы можете просто установить переменную bool, скажем, textChangedFlag, в значение true, и вы можете установить значение этой переменной по умолчанию как false. А затем используйте событие KeyDown для редактирования элемента комбинированного списка. Я дам пример кода.

Код образца:

if (e.KeyCode == Keys.Enter)
        {
            if (textChangedFlag )
            {
                if(comboBox1.SelectedIndex>=0)
                {
                    int index = comboBox1.SelectedIndex;
                    comboBox1.Items[index] = comboBox1.Text;
                    textChangedFlag = false;
                }

            }
        }

Вы можете поместить этот код в метод обработчика событий KeyDown. Надеюсь, это поможет

3 голосов
/ 20 сентября 2010
private int currentIndex;

public Form1()
{
    InitializeComponent();

    comboBox1.SelectedIndexChanged += RememberSelectedIndex;
    comboBox1.KeyDown += UpdateList;
}

private void RememberSelectedIndex(object sender, EventArgs e)
{
    currentIndex = comboBox1.SelectedIndex;
}

private void UpdateList(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter && currentIndex >= 0)
    {
        comboBox1.Items[currentIndex] = comboBox1.Text;
    }
}
...