2016-06-18 36 views
0

ListViewに3つの列があり、3列目のすべての値を緑色の前景色に変更したいと考えています。ListViewの列全体の色を変更します

ユーザー名、電子メール、ステータス

ものは見られるように、すべての列も名前が付けられ、私の3つの列です。

私はこれを試しましたが、listViewに追加されたときに3番目の列値の色を変更するのではなく、listviewに追加するだけです。

 var Status = new ListViewItem("Status"); 
     Status.SubItems[0].ForeColor = Color.FromArgb(-16711936); 
     Status.UseItemStyleForSubItems = false; 

     Pless_ListView.Items.Add(Status); 

私はまた、これほど簡単なものを試しましたが、まだ運がありません。

Pless_ListView.Items[2].ForeColor = Color.Green; 

私はまた、次のようにステータス値をListViewに追加するところで編集を試みました。

account.SubItems.Add(Status).ForeColor = Color.Green; 

この場合でも、これは不運です。

私はまた、検索しようとしましたが、これに対する答えを見つける場所がありませんでした。

編集:

これは私のリストビューコードへの追加です。

 void ColorLvColumn(ListView lv, int columnIndex, Color color, bool foreground) 
    { 
     foreach (ListViewItem lvi in lv.Items) 
     { 
      lvi.UseItemStyleForSubItems = false; // allow individual styles for subitems! 
      if (columnIndex < lvi.SubItems.Count) 
      { 
       if (foreground) lvi.SubItems[columnIndex].ForeColor = color; 
       //else lvi.SubItems[columnIndex].BackColor = color; 
      } 
     } 
    } 

    private void addAccountToPlessLV(String Username, String Password, PlessHTTP captured) 
    { 
     if (InvokeRequired) 
     { 
      Invoke(new MethodInvoker(delegate 
      { 
       ColorLvColumn(Pless_ListView, 2, Color.Green, true); 
       ListViewItem account = new ListViewItem { Text = Username }; 
       account.SubItems.Add(Email); 
       account.SubItems.Add(captured.Status).BackColor = Color.Green; 
       Pless_ListView.Items.Add(account); 
      })); 
     } 
     else 
     { 
      ColorLvColumn(Pless_ListView, 2, Color.Green, true); 
      ListViewItem account = new ListViewItem { Text = Username }; 
      account.SubItems.Add(Email); 
      account.SubItems.Add(captured.Status) 
      Pless_ListView.Items.Add(account); 
     } 
    } 

答えて

0

これは、カラム内の各アイテム/サブアイテムの色を設定します。

void ColorLvColumn(ListView lv, int columnIndex, Color color, bool foreground) 
{ 
    foreach (ListViewItem lvi in lv.Items) 
    { 
     lvi.UseItemStyleForSubItems = false; // allow individual styles for subitems! 
     if (columnIndex < lvi.SubItems.Count) 
     { 
      if (foreground) lvi.SubItems[columnIndex].ForeColor = color; 
      else lvi.SubItems[columnIndex].BackColor = color; 
     } 
    } 
} 

このようにそれを呼び出します:あなたのコードの

ColorLvColumn(Pless_ListView, 2, Color.Green, true); 

2つのノート:

  • 私はあなたが書いたことに気付いた:Status.SubItems[0]しかし第3列はStatus.SubItems[2]となるだろう。

  • が最初に欠けているを追加する必要があります。

    ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem(); 
    lvsi.ForeColor = Color.LimeGreen; 
    

    Items.SubItemsコレクションに追加:

    someItem.subItems.Addlvsi(); 
    

    しかし、単にだけでなくSubItems(string)過負荷作業でそれを追加すること

あなたコンストラクタであることを行うことができます。彼らは順番に追加する必要があることに注意してください!

Columnsを作成すると、SubItemsが作成されないことに注意してください。それはちょうどSubItemsが表示されることができるスペースを作成します。

このListViewItems.SubItemsジャグ配列であることを意味します!

+0

唯一の問題は、複数のインスタンスが、それは問題を持っている原因となっている一度にリストビューに追加されるので、これらの項目は、マルチスレッド追加されています。それをテストするときにも、それは私のためにそれを変更しませんでした。 – Dzje

+0

私の更新された答えを見てください! – TaW

+0

アップデートは私を助けてくれてありがとうございましたが、今は実際のテキストの色ではなく、背景が色づいているようです。列の代わりにテキストの色を塗りつぶすだけの方法を教えてください。非常に感謝して、私は運がないとそれを一緒に混乱しようとしました。 – Dzje

関連する問題