Autor |
Beitrag |
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Sa 18.02.06 23:32
HalliHallo..
Wie Ihr wahrscheinlich merkt, bin ich noch blutiger C#-Anfänger.
Meine Frage diesmal:
Mit z.B.
C#-Quelltext 1:
| listBox1.ForeColor = System.Drawing.Color.Red; |
kann man bekanntlicherweise die die Schriftfarbe aller Einträge in der ListBox1 ändern. Kann man auch die Farben der einzelnen Einträge unabhängig voneinander ändern?
Moderiert von Christian S.: C#-Tags hinzugefügtModeriert von Christian S.: Topic aus C# - Die Sprache verschoben am Di 21.02.2006 um 18:33
Zuletzt bearbeitet von Captain_Jack_Sparrow am Mo 20.02.06 20:05, insgesamt 1-mal bearbeitet
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 20.02.06 21:11
Hallo!
Dazu musst Du die Items selber zeichnen. Wie das geht, verrät Dir die Hilfe zum DrawItem-Ereignis der Listbox, da ist sogar ein Code-Beispiel zum Zeichnen von farbigen Items
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Di 21.02.06 19:17
Huuii..
Da hat ja scheinbar jmd. Ahnung
Hab ewigkeiten gegooglet aber nichts gefunden. Entweder beherrsche ich die Suchmaschinen nicht, oder.. keine ahnung was sonst
Werds mir bei gelegenheit angucken und mich melden.. Danke
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 22:43
Titel: Ratlos :(
Hey!
Irgendwie verstehe ich das nicht so ganz.
Ich habe eine fertige Listbox ("listEingaben") und abhängig vom Inhalt der Variable "cVorzeichen" ('+' oder '-') soll der Eintrag schwarz bzw. rot markiert werden. Was muss ich denn jetzt machen damit ich das hinbekomme?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 22:47
Wie sieht denn Dein Quelltext aus? In der Dokumentation steht doch sogar ein Code-Beispiel!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 22:54
Ich weiß, dass da ein Code-Beispiel steht, aber bin -wie gesagt- noch C#-Neuling und verstehe den nicht wirklich *schäm*
--
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void listAnzeigen() { if (cVorzeichen == '-') { listEingaben.ForeColor = System.Drawing.Color.Red; } else { listEingaben.ForeColor = System.Drawing.Color.Black; } } |
Ich weiß nicht, wie ich da jetzt den Beispielcode einbauen soll, damit eben nicht ForeColor da steht und nicht ALLES sondern nur das entsprechende Item gefärbt wird.
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 22:58
Du musst im DrawItem-Ereignis der Listbox die entsprechende Farbe für das Item setzen, welches gerade gezeichnet werden soll. Wie das geht Dokumentation
Ich weiß im Moment auch nicht, wie ich Dir da weiter helfen kann. Wenn Du mit der Dokumentation nicht klar kommst, dann frag am Besten zu den unklaren Stellen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:06
Also in der Dokumentation finde ich diesen Beispielcode:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private void listBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { listBox1.DrawMode = DrawMode.OwnerDrawFixed; e.DrawBackground(); Brush myBrush = Brushes.Black;
switch (e.Index) { case 0: myBrush = Brushes.Red; break; case 1: myBrush = Brushes.Orange; break; case 2: myBrush = Brushes.Purple; break; }
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault); e.DrawFocusRectangle(); } |
Ich weiß jetzt aber nicht wirkich, wie ich diesen Code anwenden soll.
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 23:06
Hast Du ihn einfach mal ins DrawItem-Ereignis geschrieben?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:12
öööhm.. Wahrscheinlich nich..
Wie mache ich das? Sorry ich verstehe im Moment nur Bahnhof
Wie soll ich das ins DrawItem-Ereignis schreiben?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 23:16
Hallo!
Das ist einfach
Du markierst die Listbox und in dem Fenster, in dem die Eigenschaften der Listbox angezeigt werden, klickst Du oben auf das "Blitz"-Symbol (sorry, mir fällt kein besserer Name ein). Dadurch werden nicht mehr die Eigenschaften, sondern die Ereignisse der Listbox angezeigt.
In der Liste der Ereignisse findest Du auch das Ereignis "DrawItem". Doppelklick drauf und der entsprechende Quellcode-Rohbau wird erstellt. Und für die erstellte Methode nimmst Du dann die, die in der Hilfe steht.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:24
achsoo.. ja gut, des hab ich hinbekommen..
und jetzt brauch ich einfach nur in meiner if e.index den wert 0, 1, oder 2 zuweisen oder wie was?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 23:26
In dem switch-Teil wird entschieden, welche Farbe für das aktuelle Item verwendet wird. In diesem Fall werden nur die ersten drei Items (also Index 0,1,2) unterschieden. An dieser Stelle musst Du nun Dein Entscheidungskriterium für die Farbe einfügen, wie immer das aussehen mag
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:38
so hatte ich es auch zuerst interpretiert, aber die sind immernoch alle schwarz -.-
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 23:42
Oh, in der "Anleitung" weiter oben vergessen, aber in der Doku steht es. Stell den DrawMode der Listbox mal auf OwnerDrawFixed.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:44
C#-Quelltext 1:
| listBox1.DrawMode = DrawMode.OwnerDrawFixed; |
steht doh im code, st also.. oder muss ich nochw as machen?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 22.02.06 23:47
Christian S. hat folgendes geschrieben: | Oh, in der "Anleitung" weiter oben vergessen, aber in der Doku steht es. Stell den DrawMode der Listbox mal auf OwnerDrawFixed. |
Ein Blick in eben diese Doku, fördert folgendes Zitat zu Tage:
Zitat: | Dieses Ereignis wird von einer Ownerdrawn-ListBox verwendet. Das Ereignis wird nur ausgelöst, wenn die DrawMode-Eigenschaft auf DrawMode.OwnerDrawFixed oder DrawMode.OwnerDrawVariable festgelegt ist. |
Und damit es völlig egal, dass das im Code steht, weil der gar nicht ausgeführt wird, wenn Du die Eigenschaft nicht vorher schon setzt. Das tust Du in den Eigenschaften der Listbox.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Mi 22.02.06 23:47
ach ich muss das nochmal in den komischen eigenschaften da machen?!? naja hab gemacht und soweit klappts
jetzt is erstmal nactruhe und morgen passe ich es an.. dankeschön
|
|
Captain_Jack_Sparrow
Beiträge: 32
|
Verfasst: Do 23.02.06 22:12
Ich versteh's einfach nicht *kopfschüttel*
Das von oben funktioniert einwandfrei. Aber da das jetzt nicht nach dem Index der einzelnen Einträge farbig werden soll, sondern je nach Inhalt der Variable cVorzeichen habe ich den Code so umgebaut:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| private void listEingaben_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { Brush myBrush = Brushes.Black; if (cVorzeichen == '-') { myBrush = Brushes.Red; } else { myBrush = Brushes.Black; }
e.Graphics.DrawString(listEingaben.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault); } |
Der Inhalt von cVorzeichen ändert sich ständig und damit jedesmal die Farbe ALLER Einträge. Kann man das nicht so machen, dass sich nur die Farbe des Eintrages, den man gerade erstellt ändert?
Ich will also nicht im Nachhinnein ändern sondern schon beim Erstellen des Eintrages die Farbe festlegen.
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 23.02.06 22:39
Hallo!
Was meinst Du mit "cVorzeichen ändert sich ständig". cVorzeichen ändert sich doch nirgendwo.
Du weisst schon, dass das DrawItem-Event immer dann, wenn das Item gezeichnet wird, aufgerufen wird? Und das passiert ja nicht nur beim Befüllen der Listbox, sondern immer, wenn sich an der Darstellung was ändert, wennn also z.B. ein Eintrag markiert wird!
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|