Laden...

Custom Image Button / Grafik "zerhackt"

Erstellt von gugg vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.963 Views
G
gugg Themenstarter:in
9 Beiträge seit 2010
vor 9 Jahren
Custom Image Button / Grafik "zerhackt"

Hallo zusammen,

für ein Projekt benötige ich einen angepassten Button, welcher ein spezielles Schriftfeld enthält.

Ich habe also eine Klasse von Button abgeleitet, die onPaint-Methode überschrieben und lasse ein Rectangle mit grafischem Text reinmalen.

Das funktioniert alles soweit.


        protected override void OnPaint(PaintEventArgs pevent)
        {
            base.OnPaint(pevent);

            Rectangle newRect = new Rectangle(pevent.ClipRectangle.Left + 2, pevent.ClipRectangle.Bottom - 14, pevent.ClipRectangle.Width - 4, 12);

            pevent.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 80)), newRect);

            pevent.Graphics.DrawString(_kuerzelText, _normalFont, new SolidBrush(Color.FromArgb(255, 255, 255, 255)), newRect, _myStringFormat);

            pevent.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;

        }

Leider tritt folgendes Problem auf:

Beim überfahren mit einem beliebigen Windows-Fenster (z.B. Editor) wird die Grafik des Buttons zerstört und "zerhackt" dargestellt. Dasselbe Problem tritt auch auf, wenn das Tooltip des Buttons angezeigt wird und wieder augeblendet wird.

Das Überschreiben der onMouseLeave-Methode mit This.Refresh() bzw. Parent.Refresh() schafft nur teilweise Abhilfe und bringt auch nichts bei dem Tooltip-Problem.

Wo muss ich ggf. ein Refresh() auslösen, damit das nicht mehr passiert.

Ich komm nicht auf den Fehler, was mach ich falsch ?

Besten Dank.

4.221 Beiträge seit 2005
vor 9 Jahren

ClipRectangle ist nicht das ganze ClientRectangle des Controls... sondern nur der Bereich des ClientRectangles welcher aufgrund der Ueberdeckung nicht mehr gültig ist (das ist nur dann interessant wenn Deine Zeichen-Methode weniger zu tun hätte wenn diese nur einen Teil neu zeichnen müsste).

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

G
gugg Themenstarter:in
9 Beiträge seit 2010
vor 9 Jahren

Wow, das war prompt. Danke Th69. Funktioniert.

Könntest Du mir noch kurz erklären, warum das mit ClipRectangle nicht geht. Wird doch von PaintEventArgs zur Verfügung gestellt und gezeichnet wird das Rechteck damit ja auch.

Besten Dank.

Ok, verstanden.

Danke Programmierhans.

Grüsse