Hallo, ich suche nach einer Möglichkeit in einer Listbox die Einträge in z.B. rot und grün einzufärben. Bisher habe ich das so versucht: if() { sResult = "Test -> OK"; lbTestResult.ForeColor = Color.Green; lbTestResult.Items.Add(sResult); } else { sResult = "Test -> NOK"; lbTestResult.ForeColor = Color.Red; lbTestResult.Items.Add(sResult); } Das Problem ist dabei aber, daß alle Einträge eingefärbt werden. ich möchte das im Fall "OK" der Eintrag grün ist, im Falle von NOK soll er rot sein, und vor allem bleiben Hat jemand eine Idee? Wenn ja vielen Dank im vorraus! Gruß RingoStar
Ownerdraw-Listbox verwenden, OnDraw überladen und dort zu jedem Item die (anderswo oder per ItemData) gespeicherte Farbe anwenden.
Das ist eine Listbox mit dem Fensterstil WS_OWNERDRAW.
Versuch mal den Link http://www.codeguru.com/cpp/controls/listbox/colorlistboxes/article.php/c1611/#more so habe ich auch mal eine Listbox eingefaerbt Gruss Helmi
C# war gefragt...
> Was bedeutet Ownerdraw-Listbox?
lbTestResult.DrawMode = DrawMode.OwnerDrawFixed;
Im DrawItem-Handler zuerst den Hintergrund zeichnen lassen
(e.DrawBackground()), dann den Text passend ausgeben und zum Schluss
noch e.DrawFocusRectangle() aufrufen.
Hallo, so richtig schlau werde ich aus Euren Antworten leider nicht. Wie muss ich den DrawItem-Handler einsetzen? Ich tüftel schon den ganzen Nachmittag, aber es will nicht klappen.
Im Entwurfsmodus der Form die ListBox anklicken, Eigenschaften. Unter Eigenschaften den DrawMode auf OwnerDrawFixed umstellen, auf Ereignisse und DrawItem doppelt anklicken. Den generierten DrawItem-Handler etwa so auffüllen:
1 | private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { |
2 | // Hintergrund zeichnen lassen
|
3 | e.DrawBackground(); |
4 | // eigenen Kram zeichnen
|
5 | Brush b = ((e.Index & 1) == 0) ? Brushes.Green : Brushes.Red; |
6 | e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), Font, b, |
7 | e.Bounds.Left, e.Bounds.Top); |
8 | // Fokus des Eintrags zeichnen lassen
|
9 | e.DrawFocusRectangle(); |
10 | }
|
@Arc Net Vielen Dank, Dein Beispiel bekomme ich ans laufen. Jetzt muss ich es noch für meine Zwecke verbiegen. Bei abwechselnden Farben treffe ich nicht immer OK oder NOK :-) Gruß RingoStar
hallo, das ist ja schon fast was ich suche! da ich noch ein blutiger c# anfänger bin ist mir nur noch nicht klar wie ich die farben pro textzeile anwenden kann. wenn ich das beispiel versuche zu ändern wird immer der ganze text umgefärbt :-( kann mir vieleicht jemand auf die sprünge helfen wie ich farben pro eintrag festlegen kann? martin
Hallo Martin, da ich mir nicht immer den Index merken will suche ich einfach im String nach "OK" und "NOK". Sonst schreibe ich in schwarz. Vieleicht funst das auch bei Dir? private void lbTestResult_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); Brush b; if (lbTestResult.Items[e.Index].ToString().IndexOf("NOK") > 0) b = Brushes.Red; else if (lbTestResult.Items[e.Index].ToString().IndexOf("OK") > 0) b = Brushes.Green; else b = Brushes.Black; e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),e.Font , b, e.Bounds, StringFormat.GenericDefault); e.DrawFocusRectangle(); } Gruß RingoStar
RingoStar wrote: > Hallo Martin, > > da ich mir nicht immer den Index merken will suche ich einfach im String > nach "OK" und "NOK". Sonst schreibe ich in schwarz. Vieleicht funst das > auch bei Dir? Das ist natürlich eine Möglichkeit. Die schönere Variante ist es natürlich eine eigene Item Klasse dafür aufzusetzem. Teil dieser Item Klasse ist dann eine zusätzliche Member Variable, die die Background Color dieses Items angibt. Ansonsten ist alles wie gehabt: Eine Owner Draw Listbox. In der DrawItem Funktion wird der Hintergrund gemalt, wobei dann natürlich auf dieses Member zugegriffen wird. Du weist ja welchen Datentyp die Items in der Listbox tatsächlich haben und kannst daher dorthin umcasten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.