Отключение ListView в C#, но отображение текущего выбора

У меня есть элемент управления ListView, и я пытаюсь найти самый простой / лучший способ запретить изменение выбранных строк, не скрывая выбранные строки.

Я знаю, что есть HideSelection свойство, но оно работает только тогда, когда ListView оно все еще включено (но не сфокусировано). Мне нужно, чтобы выбор был доступен для просмотра, даже если ListView отключен.

Как я могу это реализовать?

Ответов (3)

Решение

Вы также можете сделать ListView ownerdraw. Затем у вас есть полный контроль над тем, как выглядят элементы, независимо от того, выбраны они или нет, и включен ли сам ListView или нет. DrawListViewItemEventArgs предоставляет способ попросить ListView рисовать отдельные части элемента, поэтому вам нужно рисовать только те части, которые вас интересуют. Например, вы можете нарисовать фон элемента, но оставьте его для ListView для рисования текст.

Есть два варианта, изменить цвета выделенных строк отключенными. Или измените все остальные строки, чтобы имитировать, что они отключены, кроме выбранной. Первый вариант, очевидно, самый простой, а второй вариант, очевидно, потребует дополнительных мер защиты.

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

Реализуйте SelectedIndexChanged и сделайте это

    private void listViewABC_SelectedIndexChanged(object sender, EventArgs e)
    {
        listViewABC.SelectedItems.Clear();
    }