Как сохранить выделенный пункт при поиске в списке в c # winforms? - PullRequest
0 голосов
/ 30 ноября 2018

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

Пример - Перед поиском в списке.

enter image description here

После поиска в списке мой последний выбранный элемент, если он существует в отфильтрованном списке, теряет выбор отображения.

enter image description here

Мой код для поиска в списке -

 private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
    {
        string keyword = this.iBoxEventlistSearchTextBox.Text;
        lBox_Event_list.Items.Clear();

        foreach (string item in sortedEventList)
        {
            if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
            {
                lBox_Event_list.Items.Add(item);
            }
        }
    }     

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

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

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

private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
    {
        string keyword = this.iBoxEventlistSearchTextBox.Text;
        // Save the selected item before
        var selectedItem = string.Empty;
        if(lBox_Event_list?.Items?.Count > 0)
           selectedItem = lBox_Event_list.SelectedItem;
        lBox_Event_list.Items.Clear();

        foreach (string item in sortedEventList)
        {
            if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
            {
                lBox_Event_list.Items.Add(item);
            }
        }
        // Search for it in the items and set the selected item to that
        if(string.IsNullOrEmpty(selectedItem)) 
        {
          var index = lBox_Event_list?.Items?.IndexOf(selectedItem);
          if(index != -1)
              lBox_Event_list.SelectedIndex = index;
        }
    }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...