2011-01-02 2 views
21

私はListViewコントロールを持つWindowsフォームアプリケーションを持っています。私は単一の副題の前景色を変えたいと思う。行や列全体の色を変更することはできましたが、1つのサブアイテムに対してこれを行う方法はわかりませんでした。誰かがこれを行う方法を知っていますか?ListViewコントロール内の単一のサブ項目のForeColorを変更するにはどうすればよいですか?

答えて

46

ソリューションは非常に簡単です、そしてListViewSubItem.ForeColor propertyのドキュメントの備考セクションで示されます。

サブアイテムを所有しているListViewItemUseItemStyleForSubItemsプロパティがtrueに設定されている場合は、このプロパティを設定すると、持っています無効。

デフォルトの設定は、あなたが唯一の場所でのプロパティを変更する必要がなるようにListView制御中の1アイテムが所有するすべてのサブ項目のための一貫性のある外観を維持することを意図しています。 デフォルトの動作を変更するには、ListViewItemUseItemStyleForSubItems propertyを "False"に設定する必要があります。

完了したら、個々の副明細のForeColor(またはその他の)プロパティを調整できます。例:

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

ここでは、マルチクライアントのSCCMプッシュ/削除の結果を示しました。渡されたCSVは(文字列ClientName、文字列PackageName、文字列EventType、bool Result)でしたが、最も長いフィールド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] 
関連する問題