Tach zusammen,
seit einigen Tagen widme ich meine Aufmerksam dem Thema "Zeichnen mit GDI". Hierfür habe ich mir ein kleines Testprojekt "GlossyKnopf" ausgedacht.
Hier zeichne ich in einem UserControl (erbt von Button) ein Knopf. Soweit so gut. Das Zeichnen an sich ist auch nicht das Problem, mag sein das noch nicht optimal, aber das soll hier erstmal nicht das Thema sein.
Ziehe ich die Form auf der sich der Knopf befindet zu und wieder auf, macht der Knopf lustige Sachen:
Vermutung des Problems: Der Knopf wird wohl immer wieder neu gezeichnet, wenn er "sichtbar" wird, weshalb man wohl nur den neu hinzugekommenen Bereich zeichnen sollte(?).
Nun habe ich mal die Suchmaschine angeworfen und bin vermutlich an die Wurzel des Übel gestoßen. Hab zwar wunderbare Tutorials zum Thema gefunden, jedoch waren die meist viel zu überladen.
Evtl. mag mir jemand auf die Sprünge helfen?
Hier der Code aus dem Paint Event des Knopfs:
Spoiler anzeigen
Das ganze Projekt hab ich auch mal angehängt. Falls Bedarf besteht.
seit einigen Tagen widme ich meine Aufmerksam dem Thema "Zeichnen mit GDI". Hierfür habe ich mir ein kleines Testprojekt "GlossyKnopf" ausgedacht.
Hier zeichne ich in einem UserControl (erbt von Button) ein Knopf. Soweit so gut. Das Zeichnen an sich ist auch nicht das Problem, mag sein das noch nicht optimal, aber das soll hier erstmal nicht das Thema sein.
Ziehe ich die Form auf der sich der Knopf befindet zu und wieder auf, macht der Knopf lustige Sachen:
Vermutung des Problems: Der Knopf wird wohl immer wieder neu gezeichnet, wenn er "sichtbar" wird, weshalb man wohl nur den neu hinzugekommenen Bereich zeichnen sollte(?).
Nun habe ich mal die Suchmaschine angeworfen und bin vermutlich an die Wurzel des Übel gestoßen. Hab zwar wunderbare Tutorials zum Thema gefunden, jedoch waren die meist viel zu überladen.
Evtl. mag mir jemand auf die Sprünge helfen?
Hier der Code aus dem Paint Event des Knopfs:
C#-Quellcode
-
- private void Zeichnen(object sender, PaintEventArgs e)
- {
- Rectangle rect = e.ClipRectangle;
- e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
- e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
- e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
- LinearGradientBrush br;
- if (!MausIstDrauf && !MausKlickt)
- {
- br = new LinearGradientBrush(rect, _MouseOverFarbe1, _MouseOverFarbe2, 90, true);
- }
- else if (MausIstDrauf && !MausKlickt)
- {
- br = new LinearGradientBrush(rect, _MouseDownFarbe1, _MouseDownFarbe2, 90, true);
- }
- else
- {
- br = new LinearGradientBrush(rect, _MouseClickFarbe1, _MouseClickFarbe2, 90, true);
- }
- e.Graphics.FillRectangle(br, rect);
- Rectangle r = rect;
- r.Width -= 1;
- r.Height -= 1;
- e.Graphics.DrawRectangle(new Pen(new SolidBrush(_ButtonBorderColor)), r);
- StringFormat stringFormat = new StringFormat();
- stringFormat.Alignment = StringAlignment.Center;
- stringFormat.LineAlignment = StringAlignment.Center;
- Font f = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Point);
- if (_Text != "")
- e.Graphics.DrawString(_Text, f, new SolidBrush(Color.Black), rect, stringFormat);
- }
Das ganze Projekt hab ich auch mal angehängt. Falls Bedarf besteht.
"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen