Довольно простой вопрос, но я думаю, что его будет намного сложнее, чем кажется.
Я хотел бы сохранить выбор элемента listview там, когда фокус покинет представление списка, на данный момент я установил свойство hideselection
в false и это прекрасно.. он действительно вызывает ОЧЕНЬ светло-серый выбор, чтобы остаться после того, как просмотр списка теряет фокус, так что мой вопрос в том, как я могу правильно показать, что этот элемент все еще выбран, чтобы пользователь узнал об этом, что-то вроде изменения цвета текста строк или цвета фона? или просто удерживая его выделенным, как при первом выборе вся строка становится синей?
Я просмотрел intelisense и не могу найти ничего для свойства цвета или элемента или выбранного элемента индивидуального цвета?
Он должен существовать, хотя из-за того, что выбранные элементы имеют свой собственный цвет фона, где я мог бы это изменить?
О, и просмотр списка должен оставаться в подробном представлении, а это значит, что я не могу использовать единственный метод, который мне удалось найти во время поиска в google
спасибо
Здесь решение для ListView, которое не допускает множественных выборов и не имеет изображений (например, флажков).
Реализовать обработчики событий следующим образом:
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;
}
}
Я создал библиотеку классов вышеуказанного класса, чтобы добавить его в панель инструментов.
Возможным решением может быть этот ответ на другой вопрос:
Как изменить цвет списка избранных строк, даже если вы фокусируетесь на другом элементе управления?