Getting the index of multiple selected items in a listbox
У меня есть Listbox c режимом выбора Multiple. Проблема заключается в том, что при выборе нескольких элементов с одинаковым значением, я получаю результат то, что у них одинаковый индекс, как показано рис.2. А при выборе элемента с другим значением получаю результат, как на рис.3; Как можно решить эту проблему?
private void btn_1_Click(object sender, RoutedEventArgs e)
{
string values = null;
foreach (var catgry in ListBox_Answers.SelectedItems)
{
values += ListBox_Answers.Items.IndexOf(catgry).ToString() + "";
}
MessageBox.Show(values);
}
private void btn_2_Click(object sender, RoutedEventArgs e)
{
ListBox_Answers.Items.Add(txt_Value.Text);
ListBox_Answers.Items.Refresh();
}
Ответы (1 шт):
Это довольно сложно, т. к. ListBox работает не с массивом индексов. Вопрос 1: зачем вам индекс? Ну да ладно:
public class ListItem
{
public int Index { get; }
public object Value { get; }
// ...
}
Здесь идёт равенство по ссылке, т. е. даже если у 2-х объектов данного класса будет одинаковый индекс и значение, то они всё равно не равны (да, потому что у объекта типа string есть оператор == все объекты с одинаковым содержанием возвращают одинаковый индекс). Именно вот эти объекты нужно добавлять в ListBox:
void btnShow_Click(object sender, RoutedEventArgs e)
{
StringBuilder indices = new StringBuilder(answers.SelectedItems.Count);
foreach (var answer in answers.SelectedItems)
indices.Append(((ListItem)answer).Index.ToString()[^1]);
MessageBox.Show(indices);
}
void btnAdd_Click(object sender, RoutedEventArgs e)
{
answers.Items.Add(new ListItem(
index: answers.SelectedItems.Count,
value: txtValue.Text));
answers.Items.Refresh();
}


