Entwickler-Ecke

WinForms - Button mit abgerundeten Ecken


dompfaff23 - Di 26.08.14 20:08
Titel: Button mit abgerundeten Ecken
Guten Abend,
ich habe mit Informationshilfe aus dem Netz die Ecken eines Buttons abgerundet (siehe nachstehenden Code).
Nun versuche ich zusätzlich einen Rahmen um den Button zu zeichnen - leider ohne Erfolg.
Kann mir jemand auf die Sprünge helfen?
Vielen Dank!

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
        private void btn01_Paint(object sender, PaintEventArgs e)
        {
            int ecke = 35;
            Rectangle r = new Rectangle(00, btn01.Width, btn01.Height);
            System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
            gp.AddArc(r.X, r.Y, ecke, ecke, 18090);
            gp.AddArc(r.X + r.Width - ecke, r.Y, ecke, ecke, 27090);
            gp.AddArc(r.X + r.Width - ecke, r.Y + r.Height - ecke, ecke, ecke, 090);
            gp.AddArc(r.X, r.Y + r.Height - ecke, ecke, ecke, 9090);
            btn01.Region = new Region(gp);
        }


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Di 26.08.2014 um 21:28


Th69 - Di 26.08.14 20:36

Hallo,

ein Rechteck kannst du entweder mit GraphicsPath.AddRectangle [http://msdn.microsoft.com/de-de/library/a6sck65w%28v=vs.110%29.aspx] (für die Region) oder aber Graphics.DrawRectangle [http://msdn.microsoft.com/de-de/library/sx8yykw8%28v=vs.110%29.aspx] (mit e.Graphics) zeichnen.
Beachte jedoch, daß dies nur innerhalb der Grenzen des Buttons (ClientRectangle) geht, nicht außerhalb (weil du explizit um geschrieben hattest).


dompfaff23 - Di 26.08.14 20:51

Hallo Th69,
danke für die schnelle Antwort.
Leider habe ich nicht präzise formuliert; ich meinte den "abgerundeten" Button mit einem
Rahmen zu versehen und nicht um den Button herum einen Rahmen zu zeichnen.
Für einen Code wäre ich außerordentlich dankbar, denn ich komme aus der Basic-Ecke
und mit C# tu ich mir noch sehr schwer.


Ralf Jansen - Di 26.08.14 21:18

Dann mußt du zwischen den runden Ecken auch die geraden zeichnen. GraphicsPath hat dazu eine AddLine [http://msdn.microsoft.com/de-de/library/yk3ysydt(v=vs.110).aspx] Methode.
Immer schön abwechselnd AddArc und AddLine bis du einmal um den Button rum bist. Den letzten AddLine kannst du dir sparen wenn du CloseFigure [http://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.graphicspath.closefigure(v=vs.110).aspx] am GraphicsPath aufrufst. Das verbinden den Startpunkt mit dem Endpunkt des Pfads.


Zitat:
Für einen Code wäre ich außerordentlich dankbar, denn ich komme aus der Basic-Ecke
und mit C# tu ich mir noch sehr schwer.


Hier gehts um das Verhalten von Winforms. Das ist in VB.Net und C# identisch.


dompfaff23 - Mi 27.08.14 14:59

Hallo Th69,

vielen Dank für Deine Informationen, die mir sehr weiter geholfen haben.
Der Button mir Rahmen funktioniert!! Nachvollziehen kann ich es noch nicht,
da meine Kenntnisse hierfür noch nicht ausreichen - ich arbeite aber daran.

Für Deine Hilfe möchte ich mich vielmals bedanken.

Viele Grüße
dompfaff23