Laden...

ListBox.DrawItem löst nicht aus !

Erstellt von macke_a vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.924 Views
M
macke_a Themenstarter:in
291 Beiträge seit 2007
vor 13 Jahren
ListBox.DrawItem löst nicht aus !

Hallo 😃

Ich habe in meiner Software eine ListBox.

Jetzt möchte ich gerne das der ListBox_DrawItem Event Händler auslöst, sobald ich das neuzeichnen mit

ListBox.Refresh(); oder mit

ListBox.Invalidate(); in der MouseUp Funktion veranlasse.

 private void ListBox_MouseUp(object sender, MouseEventArgs e)
 {
   ListBox.Invalidate();
 }

Der EventHändler ist folgendermaßen deklariert:

this.ListBox.DrawItem += new OpenNETCF.Windows.Forms.DrawItemEventHandler(this.ListBox_DrawItem); 

Jemand eine Idee warum der Händler nicht aufgerufen wird?
Waron kann es liegen?

Gruss ma

799 Beiträge seit 2007
vor 13 Jahren

Hallo,

hast du auf der MSDN auch diesen Absatz beachtet?

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.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
M
macke_a Themenstarter:in
291 Beiträge seit 2007
vor 13 Jahren

Ohja,
Du hast Recht!

Das Event wird jetzt ausgelöst.
Allerdings muss ich den Textinhalt jetzt selber schreiben 😦

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo macke_a,

Allerdings muss ich den Textinhalt jetzt selber schreiben 😦

deshalb heißt es ja Ownerdrawn. SCNR

herbivore

M
macke_a Themenstarter:in
291 Beiträge seit 2007
vor 13 Jahren

Hallo !

Ich habe eine weitere Frage zu meiner Programmierung bei der ich das folgende Event nutze, um die Einträge in meiner Listbox farblich umzugestalten.

 private void ListBox_DrawItem(object sender, OpenNETCF.Windows.Forms.DrawItemEventArgs e)
{  
     e.DrawBackground(Color.White);

     switch (ListBox.SelectedIndex)
     {
        case 0: { if (e.Index == 0) { e.DrawBackground(Color.Red); } break; }
        case 1: { if (e.Index == 1) { e.DrawBackground(Color.Red); } break; }
        case 2: { if (e.Index == 2) { e.DrawBackground(Color.Red); } break; }
        case 3: { if (e.Index == 3) { e.DrawBackground(Color.Red); } break; }
        case 4: { if (e.Index == 4) { e.DrawBackground(Color.Red); } break; }
     }
}

Diese Event wird immer automatisch aufgerufen, wenn z.B. ein Tastendruck in der ListBox erfolgte.

Wie aus der Funktion vom dem Event sichtbar wird, sind alle fünf Einträge Rot gezeichnet.

Jetzt möchte ich gerne diese Funktion aufrufen, wenn z.B. ein Tastendruck auf ein ButtonClick Ereignis von einem anderen grafischen Element erfolgte.

Wie muss ich diese Funktion programmieren um das Event aufzurufen?

Jemand eine Idee..?

4.931 Beiträge seit 2008
vor 13 Jahren

Deine Frage verstehe ich nicht ganz.
Jedoch weißt du ja schon, daß man die ListBox mittels "Invalidate" bzw. "Refresh" aktualisiert...

Und deinen Code kann man auf eine (bzw. der Übersichtlichkeit auf zwei) Zeile kürzen:


if (e.Index == ListBox.SelectedIndex)
    e.DrawBackground(Color.Red);

😁

M
macke_a Themenstarter:in
291 Beiträge seit 2007
vor 13 Jahren

Hi TH69

Mit Listbox.Invalidate() oder Listbox.Refresh() kann ich das Neuzeichen nicht veranlassen bzw. der Event wird nicht ausgelöst!!!

Wie kann das sein..?

Ich rufe Invaliate() bzw. Refresh() mit einer Delegation Funktion auf.

Gibt es ein simple Erklärung für das Verhalten..?

Gruss

PS: Danke für den C#-Source Code

4.221 Beiträge seit 2005
vor 13 Jahren

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...