Autor Beitrag
Captain_Jack_Sparrow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: Sa 18.02.06 23:32 
HalliHallo..
Wie Ihr wahrscheinlich merkt, bin ich noch blutiger C#-Anfänger.
Meine Frage diesmal:

Mit z.B.
ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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*
--
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 :arrow: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: Mi 22.02.06 23:06 
Also in der Dokumentation finde ich diesen Beispielcode:
ausblenden 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)
{
   // Set the DrawMode property to draw fixed sized items.
   listBox1.DrawMode = DrawMode.OwnerDrawFixed;
   // Draw the background of the ListBox control for each item.
   e.DrawBackground();
   // Create a new Brush and initialize to a Black colored brush by default.
   Brush myBrush = Brushes.Black;

   // Determine the color of the brush to draw each item based on the index of the item to draw.
   switch (e.Index)
   {
      case 0:
         myBrush = Brushes.Red;
         break;
      case 1:
         myBrush = Brushes.Orange;
         break;
      case 2:
         myBrush = Brushes.Purple;
         break;
   }

   // Draw the current item text based on the current Font and the custom brush settings.
   e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault);
   // If the ListBox has focus, draw a focus rectangle around the selected item.
   e.DrawFocusRectangle();
}

Ich weiß jetzt aber nicht wirkich, wie ich diesen Code anwenden soll.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: Mi 22.02.06 23:12 
öööhm.. Wahrscheinlich nich..
Wie mache ich das? :oops: Sorry ich verstehe im Moment nur Bahnhof

Wie soll ich das ins DrawItem-Ereignis schreiben?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: Mi 22.02.06 23:38 
so hatte ich es auch zuerst interpretiert, aber die sind immernoch alle schwarz -.-
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: Mi 22.02.06 23:44 
ausblenden C#-Quelltext
1:
listBox1.DrawMode = DrawMode.OwnerDrawFixed;					

steht doh im code, st also.. oder muss ich nochw as machen?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 22.02.06 23:47 
user profile iconChristian 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32



BeitragVerfasst: 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:
ausblenden 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)
    {
        // Create a new Brush and initialize to a Black colored brush by default.
        Brush myBrush = Brushes.Black;
  
        // Determine the color of the brush to draw each item based on the index of the item to draw.
          if (cVorzeichen == '-')
          { 
            myBrush = Brushes.Red;
          }
          else
          { 
            myBrush = Brushes.Black;
          }

        // Draw the current item text based on the current Font and the custom brush settings.
        e.Graphics.DrawString(listEingaben.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault);
        // If the ListBox has focus, draw a focus rectangle around the selected item.
      //  e.DrawFocusRectangle();
    }

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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 23.02.06 22:39 
Hallo!

Was meinst Du mit "cVorzeichen ändert sich ständig". cVorzeichen ändert sich doch nirgendwo. :nixweiss:

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".