C # ListView Detail, выделите одну ячейку - PullRequest
10 голосов
/ 18 октября 2008

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

Я экспериментировал с подэлементами, нарисованными владельцем, но используя приведенный ниже код, я получил выделенные ячейки, но без текста! Есть какие-нибудь идеи о том, как заставить это работать? Спасибо за вашу помощь.

//m_PC.Location is the X,Y coordinates of the highlighted cell.


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X))
        e.SubItem.BackColor = Color.Blue;
    else
        e.SubItem.BackColor = Color.White;
    e.DrawBackground();
    e.DrawText();
}

Ответы [ 3 ]

14 голосов
/ 18 октября 2008

Вы можете сделать это без рисования владельцем списка:

// create a new list item with a subitem that has white text on a blue background
ListViewItem lvi = new ListViewItem( "item text" );
lvi.UseItemStyleForSubItems = false;
lvi.SubItems.Add( new ListViewItem.ListViewSubItem( lvi,
    "subitem", Color.White, Color.Blue, lvi.Font ) );

Аргументы Color для конструктора ListViewSubItem управляют основным цветом и цветом фона подэлемента. Здесь необходимо установить для UseItemStyleForSubItems значение False для элемента списка, в противном случае изменения цвета будут игнорироваться.

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

2 голосов
/ 18 октября 2008

Разобрался. Вот код для переключения выделения определенного подпункта.

listView1.Items[1].UseItemStyleForSubItems = false;
if (listView1.Items[1].SubItems[10].BackColor == Color.DarkBlue)
{
    listView1.Items[1].SubItems[10].BackColor = Color.White;
    listView1.Items[1].SubItems[10].ForeColor = Color.Black;
}
else
{
    listView1.Items[1].SubItems[10].BackColor = Color.DarkBlue;
    listView1.Items[1].SubItems[10].ForeColor = Color.White;
}
1 голос
/ 23 октября 2012

В моем случае я хотел выделить определенные строки, включая все поля. Таким образом, каждая строка в моем списке с «Medicare» в первом столбце выделяет всю строку:

public void HighLightListViewRows(ListView xLst)
        {
            for (int i = 0; i < xLst.Items.Count; i++)
            {
                if (xLst.Items[i].SubItems[0].Text.ToString() == "Medicare")
                {
                    for (int x = 0; x < xLst.Items[i].SubItems.Count; x++)
                    {
                        xLst.Items[i].SubItems[x].BackColor = Color.Yellow;
                    }
                }
            }
        }
...