Farbige Subitems
-
Ich habe eine Klasse die ein ListView mit Objekten aus einer Collection füllt und automatisch updated wenn Objecte zur Collection hinzugefügt/entfernt werden. Welche Property in die ListView geschrieben werden und wie der Header heist lege ich durch Attribute fest.
Damit habe ich keine Probleme,aber da ich nicht nur schwarzen Text auf weissen Hintergrund möchte,habe der Klassen eine List von Objekten hinzugefügt, die das ListViewItem formatieren sollen.
Eines der Formate soll Zahlen einfärben.Das funktioniert auch soweit das der Wert der Textfarbe des Subitems geändert wird,aber leider ändernd sich nichts an der Anzeige des Items.
Hier ist der relevante Code:
//Das hinzufügen eines Items zur ListView: private void OnAdd(object sender, ListEventArgs e) { //Invoke falls die Collection in einen Thread gefüllt wird if (ListView.InvokeRequired) { ListView.Invoke(new CollectionEventDelegate(OnAdd),new object[]{sender,e}); return; } //Falls ein Objekt hinzugefügt wird das zusätzliche Header braucht werden alle items neuerstellt if (!CheckHeaderChange(e.Item, true)) { //Macht aus einen Objekt ein ListViewItem ListViewItem l_item = ToListViewItem(e.Item); if (l_item != null) { ListView.Items.Insert(e.Index, l_item); int index =ListView.Items.IndexOf(l_item); foreach (IListViewAdapterStyle style in Styles) { style.Style(l_item, index);//Die Formatierungsfunktion } item_position.Add(e.Item,index ); } } } //Das Formatieren public void Style(ListViewItem item, int index) { foreach (ColumnHeader col in item.ListView.Columns) { if (Columns.Contains(col.Text)) { double d = 0; if (double.TryParse(item.SubItems[col.Index].Text, out d)) { if (d > 0) { MessageBox.Show("1 " +item.SubItems[col.Index].ForeColor.ToString()); item.SubItems[col.Index].ForeColor = PositiveNumbersColor; MessageBox.Show("2 "+ item.SubItems[col.Index].ForeColor.ToString()); } if (d == 0) item.SubItems[col.Index].ForeColor = ZeroColor; if (d < 0) item.SubItems[col.Index].ForeColor = NegativeNumbersColor; item.ListView.RedrawItems(item.Index, item.Index, false); } } } }
-
Hat sich erledigt,musste nur UseItemStyleForSubItems auf false setzen.Ich wusste nicht das das standardmässig auf true steht.