2011-01-02 3 views
21

ListView 컨트롤이있는 Windows Form 응용 프로그램이 있습니다. 하나의 하위 항목의 forecolor를 변경하고 싶습니다. 전체 행이나 열의 색상을 변경할 수는 있었지만 하나의 하위 항목에 대해이 작업을 수행하는 방법을 찾지 못했습니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?ListView 컨트롤에서 단일 하위 항목의 ForeColor를 변경하려면 어떻게해야합니까?

답변

46

이 솔루션은 매우 간단하고 ListViewSubItem.ForeColor property에 대한 설명서의 설명 부분에 표시됩니다 : 하위 항목을 소유 ListViewItemUseItemStyleForSubItems 속성이 true로 설정되어있는 경우

는,이 속성을 설정하면이

효과 없음.

은 기본 설정은 당신은 단지 한 곳에서 속성을 변경해야합니다 있도록 ListView 컨트롤의 항목 하나가 소유 한 모든 하위 항목에 대한 일관된 모양을 유지하기위한 것입니다. 기본 동작을 변경하려면 ListViewItemUseItemStyleForSubItems property을 "거짓"으로 설정해야합니다.

일단 작업을 완료하면 개별 하위 항목의 ForeColor (또는 기타) 속성을 조정할 수 있습니다. 예 :

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

다음은 다중 클라이언트 SCCM 푸시/제거 결과를 보여주는 방법입니다. 전달 된 CSV는 (문자열 ClientName, 문자열 PackageName, 문자열 EventType, bool 결과) 이었지만, 가장 긴 필드 인 Package Name을 마지막으로 표시하고 성공/실패 색상을 더 쉽게 볼 수있는 결과를 얻고 싶었습니다.

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

모든 하위 항목의 색상을 설정하고 원하는 색상으로 변경하는 것이 좋습니다.

예제 코드 :

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

값이있는 모든 하위 항목 색상이 예제 "월요일"

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] 
관련 문제