c# listview highlight ownerdrawn

C#ListView Detail, Resalta una sola celda



highlight ownerdrawn (3)

Lo averigué. 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; }

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.

He experimentado con los subelementos dibujados por el propietario, pero usando 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(); }


Puede hacer esto sin propietario-dibujando 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 para el constructor ListViewSubItem controlan el color de primer plano y de fondo del subelemento. Lo más crítico que hay que hacer aquí es establecer UseItemStyleForSubItems en False en el elemento de la lista; de lo contrario, se ignorarán los cambios de color.

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


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 muestra toda la fila resaltada:

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