2011-01-02 10 views

Respuesta

46

La solución es bastante simple, y se indica en el apartado de comentarios de la documentación para el ListViewSubItem.ForeColor property:

Si la propiedad UseItemStyleForSubItems del ListViewItem que posee el subtema se establece en true, establecer esta propiedad tiene sin efecto.

La configuración por defecto tiene la intención de mantener una apariencia coherente para todos los subelementos propiedad de un único elemento en un control ListView modo que es suficiente con cambiar las propiedades en un solo lugar. Para cambiar el comportamiento predeterminado, debe configurar el UseItemStyleForSubItems property de un determinado ListViewItem en "False".

Una vez que hayas hecho esto, se puede ajustar el ForeColor (o cualquier otra) propiedad de un subtema individuo. Por ejemplo:

myListView.Items[0].UseItemStyleForSubItems = false; 
myListView.Items[0].SubItems[1].ForeColor = Color.Red; 
1

Así es como lo hice para mostrar los resultados de una inserción/extracción SCCM multicliente. El CSV pasado era (string ClientName, string PackageName, string EventType, bool Result), pero quería mostrar el campo más largo, Package Name por último, y tener los resultados donde sería más fácil ver el color para el éxito/fracaso.

private void MultiClientResultForm_Load(object sender, EventArgs e) 
    { 
     foreach (string token in Main.ClientListResults) 
     { 
      string[] ResultRecord = token.Split(new string[] { "," }, StringSplitOptions.None); 
      if (ResultRecord[0] != "") 
      { 
       ListViewItem row = new ListViewItem(ResultRecord[0]); 
       row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[2])); 
       if (ResultRecord[3] == "true") 
       { 
        row.SubItems.Add(new ListViewItem.ListViewSubItem(row, "Success")); 
        row.SubItems[2].ForeColor = Color.ForestGreen; 
       } 
       else 
       { 
        row.SubItems.Add(new ListViewItem.ListViewSubItem(row, "Fail")); 
        row.SubItems[2].ForeColor = Color.DarkRed; 
       } 
       row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[3])); 
       row.SubItems.Add(new ListViewItem.ListViewSubItem(row, ResultRecord[1])); 
       listViewResults.Items.Add(row); 
      } 
     } 
    } 
2

Una manera sería establecer el color para todos los subelementos y cambiar para el que desee.

código Ejemplo:

private void btn_Add_Click(object sender, EventArgs e) 
    { 

     ListViewItem lvi = new ListViewItem(); 
     ListViewItem.ListViewSubItem lvsi1 = new ListViewItem.ListViewSubItem(); 
     ListViewItem.ListViewSubItem lvsi2 = new ListViewItem.ListViewSubItem(); 

     lvi.Text = tb_Main.Text; 
     lvsi1.Text = tb_Sub1.Text; 
     lvsi2.Text = tb_Sub2.Text; 

     lvi.UseItemStyleForSubItems = false; 

     lv_List.ForeColor = Color.Black; 

     if (lvsi1.Text == tb_Different.Text) 
     { 
      lvsi1.ForeColor = Color.Red; 
     } 

     if (lvsi2.Text == tb_Different.Text) 
     { 
      lvsi2![enter image description here][2].ForeColor = Color.Red; 
     } 

     lv_List.Items.Add(lvi); 
     lvi.SubItems.Add(lvsi1); 
     lvi.SubItems.Add(lvsi2); 

    } 

enter image description here

2

este ejemplo de color cada subelemento que tiene el valor "Lunes"

public static void colorListcolor(ListView lsvMain) 
    {   

     foreach (ListViewItem lvw in lsvMain.Items) 
     { 
      lvw.UseItemStyleForSubItems = false; 

      for (int i = 0; i < lsvMain.Columns.Count; i++) 
      { 
       if (lvw.SubItems[i].Text.ToString() == "Monday") 
       { 
        lvw.SubItems[i].BackColor = Color.Red; 
        lvw.SubItems[i].ForeColor = Color.White; 
       } 
       else { 
        lvw.SubItems[i].BackColor = Color.White; 
        lvw.SubItems[i].ForeColor = Color.Black; 
       } 
      } 

     }  
    }[![Screenshot of the result from the code above][1]][1] 
Cuestiones relacionadas