Pergunta

Eu estou usando um ListView em C # para fazer uma grade. Eu gostaria de descobrir uma maneira de ser capaz de destacar uma célula específica, através de programação. Eu só preciso destacar uma célula.

Eu experimentei com subitens Proprietário Drawn, mas usando o código abaixo, eu fico células realçado, mas nenhum texto! Há algumas ideias sobre como obter este trabalho? Obrigado por sua ajuda.

//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();
}
Foi útil?

Solução

Você pode fazer isso sem-desenho proprietário da lista:

// 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 ) );

argumentos a cor para o construtor ListViewSubItem está controlando a cor de primeiro plano e plano de fundo do subitem. A coisa importante a fazer aqui é conjunto UseItemStyleForSubItems para False no item da lista, caso contrário, as alterações de cores será ignorada.

Eu acho que sua solução desenhada pelo proprietário teria funcionado tão bem, mas você tem que lembrar de mudar o texto (em primeiro plano) cor quando você mudar o fundo para azul, caso contrário, o texto será difícil de ver.

Outras dicas

Descobri-lo. código de aqui para alternar o destaque de um subitem específico.

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;
}

No meu caso, eu queria destacar linhas específicas, incluindo todos os campos. Assim, cada linha no meu listview com "Medicare" na primeira coluna recebe toda a linha destacam-se:

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;
                    }
                }
            }
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top