Обновление элементов в ComboBox после Get запроса

130
22 февраля 2021, 11:40

У меня после запроса приходит список, который я заполняю в Combobox. У меня получается так, что после нового запроса список в Combobox дополняется, а не обновляется. В связи с этим у меня вопрос, как мне сделать обновление списка? Стоит уточнить, что новый список приходит после каждого изменения свойства Text. Программный код:

private void InputComboBox_TextChanged(object sender, EventArgs e)
        {
            string url = @"https://www.multitran.com/ms.exe?l1=1&l2=2&s=" + InputComboBox.Text;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.Referer = "https://www.multitran.com/";
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                string[] strMass = reader.ReadToEnd().Split(' ');
                for (int i = 0; i < strMass.Length; i++)
                {
                    InputComboBox.Items.Add(strMass[i]);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Something wrong...");
            }
Answer 1

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

public class MyForm : Form
{
//  IDisposable textBoxSubscriber;

Конструктор формы. Просто создаем контролы и подписываемся

    public MyForm()
    {
        this.Width = 400;
        this.Height = 200;
        var tb = new TextBox() { Width = 200, Left = 10, Top = 10 };
        this.Controls.Add(tb);
        var cb = new ComboBox() { Width = 200, Left = 10, Top = 35 };
        this.Controls.Add(cb);
//      Если использовать пакет System.Reactive и троттлить событие текстбокса одной секундой. 
//      textBoxSubscriber = Observable
//              .FromEventPattern(h => tb.TextChanged += h, h => tb.TextChanged -= h)
//              .Throttle(TimeSpan.FromSeconds(1))
//              .SubscribeOn(Scheduler.CurrentThread)
//              .Subscribe(async x => RefreshComboBox(cb, await GetWords(tb.Text)));

        // Если НЕ использовать пакет System.Reactive, а просто подписаться на текстбокс
        tb.TextChanged+= async (sender, args) => RefreshComboBox(cb, await GetWords(tb.Text));
    }

Обновлялка комбобокса

    void RefreshComboBox(ComboBox cb, string[] words)
    {       
        cb.Items.Clear();
        cb.Items.AddRange(words);                                        
    }

Работа с сетью, переделал на асинхронную

    async Task<string[]> GetWords(string filter)
    {
        string url = @"https://www.multitran.com/ms.exe?l1=1&l2=2&s=" + filter;
        try
        {
            using (var client = new HttpClient())
            {
                var ret = await client.GetStringAsync(url);
                string[] strMass = ret.Split(new[] { " ", Environment.NewLine }, 
                                                            StringSplitOptions.RemoveEmptyEntries)
                    .Distinct()
                    .OrderBy(x => x)
                    .ToArray();
                return strMass;
            }
        }
        catch (Exception)
        {
            MessageBox.Show("Something wrong...");
            return new string[0];
        }
    }
}

Вызов этой красоты

var f = new MyForm();
f.ShowDialog();

В работе:

READ ALSO
Где посмотреть все коды ошибок при регистрации?

Где посмотреть все коды ошибок при регистрации?

У меня поставленная регистрация:

108
Красивая обертка для try-catch в C#

Красивая обертка для try-catch в C#

Вопрос не про то, как красиво программировать, чтобы этот вопрос не возникал, а про красивую обертку над try-catch

110
Информация о OnTriggerEnter2D

Информация о OnTriggerEnter2D

Есть такие методы как OnTriggerEnter2D и OnTriggerStay2DКак узнать когда объект входит в триггер, а когда начинается фаза Stay, я имею ввиду, есть ли какой-то...

105
Поиск по БД using entityframework in mvc project

Поиск по БД using entityframework in mvc project

Есть таблица в базе данных для нее есть контроллер

144