2008-10-18 12 views
10

Estoy usando un ListView en C# para hacer una grilla. Me gustaría encontrar una manera de poder resaltar una celda específica, programáticamente. Solo necesito resaltar una celda.C# ListView Detail, Resalte una sola celda

He experimentado con los subelementos del propietario dibujado, pero utilizando el código a continuación, obtengo celdas resaltadas, ¡pero no texto! ¿Hay alguna idea sobre cómo hacer que esto funcione? Gracias por tu ayuda.

//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(); 
} 
+0

¿Formas de pago o web? – tvanfosson

Respuesta

14

Usted puede hacer esto sin dueño de dibujo de la 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)); 

Los argumentos de color al constructor ListViewSubItem están controlando el color de primer plano y el fondo del subtema. Lo más importante que hay que hacer aquí es establecer UseItemStyleForSubItems en Falso en el elemento de la lista, de lo contrario, se ignorarán los cambios de color.

Creo que su solución de dibujo de propietario también habría funcionado, pero debe recordar cambiar el color del texto (primer plano) cuando cambie el fondo a azul, de lo contrario, el texto será difícil de ver.

1

Lo descubrí. Aquí hay un código para alternar el resaltado de un subelemento 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; 
} 
1

En mi caso, quería resaltar filas específicas, incluidos todos los campos. Entonces, cada fila en mi lista de vista con "Medicare" en la primera columna resalta toda la fila:

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