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
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.
Ohja,
Du hast Recht!
Das Event wird jetzt ausgelöst.
Allerdings muss ich den Textinhalt jetzt selber schreiben 😦
Hallo macke_a,
Allerdings muss ich den Textinhalt jetzt selber schreiben 😦
deshalb heißt es ja Ownerdrawn. SCNR
herbivore
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..?
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);
😁
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
Den Link schon gesehen ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...