WinForms ListBox с объектами только для чтения/отключенными

Существует ли способ сделать некоторые объекты в ListBox readonly/disabled, таким образом, они не могут быть выбраны? Или там какие-либо подобные средства управления к ListBox для обеспечения этой функциональности?

5
задан dstr 13 March 2010 в 11:40
поделиться

1 ответ

ListBox не имеет поддержки для этого. Можно что-то прикрутить, можно отменить выбор выделенного элемента. Вот глупый пример, который предотвращает выделение элементов с четными номерами:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
  for (int ix = listBox1.SelectedIndices.Count - 1; ix >= 0; ix--) {
    if (listBox1.SelectedIndices[ix] % 2 != 0) 
      listBox1.SelectedIndices.Remove(listBox1.SelectedIndices[ix]);
  }
}

Но мерцание довольно заметно, и оно портит клавиатурную навигацию. Вы можете получить лучшие результаты, используя CheckedListBox, вы можете предотвратить установку пользователем флажка для элемента:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
  if (e.Index % 2 != 0) e.NewValue = CheckState.Unchecked;
}

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

4
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: