OnPaint von ListBox überschreiben
-
Hallo zusammen!
Bin gerade dabei eine Klasse von ListBox (ImageListBox) abzuleiten. Eigentlich alles kein Problem nur leider wird weder meine überschriebene OnPaint- noch die ebenfalls überschriebene OnDrawItem-Methode ausgeführt.
Der zuständige Code sieht etwa so aus:
public ref class ImageListBox : public System::Windows::Forms::ListBox { // .... protected: virtual void OnPaint(PaintEventArgs ^e) override { // Zeichenroutinen für meine ImageListBox //.... System::Windows::Forms::ListBox::OnPaint(e); } } protected: virtual void OnDrawItem(DrawItemEventArgs ^e) override { ImageListBoxItem ^item; // Eigene Klasse if (this->Items->Count > 0) { item = (ImageListBoxItem^)this->Items[e->Index]; item->DrawItem(e, this->Margin, this->m_imageSize); } } //... }
Hab schon alles mögliche versucht doch die beiden überschriebenen Methoden werden einfach nicht ausgeführt, stattdessen macht es den Anschein, dass einfach die Standard ListBox-Methoden (OnPaint & OnDrawItem) ausgeführt werden.
Danke, mfg
mik
-
wieso schreibst du des so?
virtual void OnPaint(PaintEventArgs ^e) override
gehört das sich nicht so?:
protected override void OnPaint(System::Windows::Forms::PaintEventArgs ^p)
und
public ref class ImageListBox : public System::Windows::Forms::ListBox
sollte wohl
public ref class ImageListBox : System::Windows::Forms::ListBox
heißen
-
Helfender Helfer schrieb:
wieso schreibst du des so?
gehört das sich nicht so?:protected override void OnPaint(System::Windows::Forms::PaintEventArgs ^p)
Denke mal, dass meine Variante syntaktisch da schon passen sollte. Bei deiner schreit jedenfalls der Compiler und ob das public vor der abzuleitenden Klasse steht oder nicht macht auch keinen Unterschied (gerade getestet).
mfg
-
Kann es sein, dass du der ListBox noch den entsprechenden Event-Handler zuweisen musst? Aber bitte nicht steinigen, wenn ich total daneben liege
-
Hätte ich auch schon probiert. Also nicht OnPaint und OnDrawItem überschreiben, sondern eben die Events abfangen, was aber eigentlich gar nicht mein Ziel sein kann.
Ich will ja nicht die Events abfangen, sondern die Zeichenroutine komplett überschreiben und meine eigenen Dinge zeichnen (in dem Fall eben Bilder statt dem Text für jedes Item)...
Nur so nebenbei:
Das ganze Control hab ich zuerst in C# geschrieben, weil ich da einfach fitter bin, als in C++ und dann beinahe 1:1 in C++ übernommen. In C# hat das ganze genau so funktioniert nur eben in C++ nicht. Keine Ahnung, wo da der Unterschied liegt??
-
Soda, nach viel zu viel verschwendeter Zeit für die Suche nach der Lösung bin ich nun auf den Fehler gekommen:
Ich hab einfach vergessen den DrawMode auf OwnerDrawFixed (oder halt Variable) zu stellen.
Wie ich solche Fehler hasse...
mfg