Вид списка Выбранная подсветка

1

Довольно простой вопрос, но я думаю, что его будет намного сложнее, чем кажется.

Я хотел бы сохранить выбор элемента listview там, когда фокус покинет представление списка, на данный момент я установил свойство hideselection в false и это прекрасно.. он действительно вызывает ОЧЕНЬ светло-серый выбор, чтобы остаться после того, как просмотр списка теряет фокус, так что мой вопрос в том, как я могу правильно показать, что этот элемент все еще выбран, чтобы пользователь узнал об этом, что-то вроде изменения цвета текста строк или цвета фона? или просто удерживая его выделенным, как при первом выборе вся строка становится синей?

Я просмотрел intelisense и не могу найти ничего для свойства цвета или элемента или выбранного элемента индивидуального цвета?

Он должен существовать, хотя из-за того, что выбранные элементы имеют свой собственный цвет фона, где я мог бы это изменить?

О, и просмотр списка должен оставаться в подробном представлении, а это значит, что я не могу использовать единственный метод, который мне удалось найти во время поиска в google

спасибо

Показать ещё 1 комментарий
Теги:
listview
visual-studio-2010

2 ответа

4

Здесь решение для ListView, которое не допускает множественных выборов и не имеет изображений (например, флажков).

  • Установите обработчики событий для ListView (в этом примере он называется listView1):
    • DrawItem
    • Оставить (вызывается, когда фокус ListView потерян)
  • Объявить глобальную переменную int (т.е. член формы, которая содержит ListView, в этом примере он называется gListView1LostFocusItem) и присвойте ему значение -1
    • int gListView1LostFocusItem = -1;
  • Реализовать обработчики событий следующим образом:

    private void listView1_Leave(object sender, EventArgs e)
    {
        // Set the global int variable (gListView1LostFocusItem) to
        // the index of the selected item that just lost focus
        gListView1LostFocusItem = listView1.FocusedItem.Index;
    }
    
    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        // If this item is the selected item
        if (e.Item.Selected)
        {
            // If the selected item just lost the focus
            if (gListView1LostFocusItem == e.Item.Index)
            {
                // Set the colors to whatever you want (I would suggest
                // something less intense than the colors used for the
                // selected item when it has focus)
                e.Item.ForeColor = Color.Black;
                e.Item.BackColor = Color.LightBlue;
    
               // Indicate that this action does not need to be performed
               // again (until the next time the selected item loses focus)
                gListView1LostFocusItem = -1;
            }
            else if (listView1.Focused)  // If the selected item has focus
            {
                // Set the colors to the normal colors for a selected item
                e.Item.ForeColor = SystemColors.HighlightText;
                e.Item.BackColor = SystemColors.Highlight;
            }
        }
        else
        {
            // Set the normal colors for items that are not selected
            e.Item.ForeColor = listView1.ForeColor;
            e.Item.BackColor = listView1.BackColor;
        }
    
        e.DrawBackground();
        e.DrawText();
    }
    

Примечание. Это решение может привести к некоторому мерцанию. Исправление для этого включает подклассификацию элемента управления ListView, чтобы вы может изменить защищенное свойство DoubleBuffered на true.

public class ListViewEx : ListView
{
    public ListViewEx() : base()
    {
        this.DoubleBuffered = true;
    }
}

Я создал библиотеку классов вышеуказанного класса, чтобы добавить его в панель инструментов.

0
  • 0
    Кажется неправильным дать вам правильный ответ, но да, это именно то, что я искал, лол!
  • 0
    Ну, есть несколько вещей, которые этот ответ не охватывает, но определенно должен быть хорошей отправной точкой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню