У меня после запроса приходит список, который я заполняю в 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...");
}
Немного переписал ваш код. Вашу проблему не воспроизвел, но всё равно решил кодом поделиться, может будет вам полезно.
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();
В работе:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вопрос не про то, как красиво программировать, чтобы этот вопрос не возникал, а про красивую обертку над try-catch
Есть такие методы как OnTriggerEnter2D и OnTriggerStay2DКак узнать когда объект входит в триггер, а когда начинается фаза Stay, я имею ввиду, есть ли какой-то...
Есть таблица в базе данных для нее есть контроллер