OnPaint überschreiben
-
Hallo,
Ich habe folgende Klasse (gekürzt):public ref class CFC: System::Windows::Forms::Control { virtual void OnPaint(System::Windows::Forms::PaintEventArgs^ e) override { } };
Selbst wenn ich Refresh noch extra aufrufe wird OnPaint nicht ausgeführt. Woran liegt das?
-
Refresh bringt nicht immer etwas. Refresh ist soweit cih weiß eher für das Layout zuständig. Invalidate sort für das neuzeichnen (wenn du willst auch nur für einen bestimmten Bereich).
Außerdem darf (im Konstruktor) ControlStyles::UserPaint per SetStyle nicht auf false gesetzt sein.
-
Leider hilft das nicht.
-
Hast du wirklich OnPaint geschrieben, nicht OnPrint passiert mir manchmal
Wird SetStyle im Konstruktor mit anderen Parametern aufgerufen?
-
Eigentlich dachte ich, das dieses Setstyle dazu garnicht nötig ist, bisher funktionierten meine eigenen Controls auch ohne... Nur dieses eine nicht.
-
Hallo,
Nach langer Suche habe ich nun die Ursache gefunden (vlt. hilfreich für andere):in der OnPaint-Methode wird die Größe des Controls gesetzt. Dies hat dazu geführt, das beim ersten Aufruf von OnPaint die Größe auf 0 gesetzt wurde. Daher ging .Net davon aus; Zeichnen sei unnötig, was dazu führte, das die Methode nicht mehr aufgerufen wurde und sich die Größe somit auch nicht mehr ändern konnte.
Lösung (z.B): Im SizeChanged-Event Größe prüfen und wenn 0, dann auf 1 setzenDanke für die Versuche mir zu helfen, was aber leider nicht zum Erfolg führen konnte, da ich die Zeile, die das verursachte nicht gepostet hatte (Ich hielt sie für irrelevant...).
mfg
Mr. X