lunedì 12 marzo 2007

Come creare un pulsante a forma circolare

Prima di tutto dobbiamo creare un progetot di tipo "class library".
Dopo clicchiamo con il tasto di sinistra del mouse nella "solution explorer" e nel menu a tendina che compare su "Add Reference". Cerchiamo la voce System.Drawing e aggiungiamola al progetto cliccando su Ok e allo stesso modo anche la voce System.Windows.Form.
A questo punto dobbiamo scrivere il codice della classe che gestirà la creazione del pulsante:

Public Class RoundButton
Inherits System.Windows.Form.Button
Private Function GetRoundedPath(Byval rect as rectangle, byval radius as Int32) As GraphicsPath
Dim roundrect As New GraphicsPath
roundrect.addline(rect.Left + radius, rect.Top, rect.Right - radius, rect.Top)
roundrect.Addarc(rect.Right - 2 * radius, rect.Top, radius * 2, radius * 2, 270,90)
roundrect.AddLine(rect.Right, rect.Top + radius, rect.Right, rect.Bottom -10)
roundrect.Addarc(rect.Right - 2 * radius, rect.Bottom - radius * 2, radius * 2, radius * 2,0,90)
roundrect.AddLine(rect.Right 2 * radius, rect.Bottom, rect.Left + radius, rect.Bottom)
roundrect.Addarc(rect.Left, rect.Bottom - radius * 2, radius * 2, radius * 2,90,90)
roundrect.AddLine(rect.Left, rect.Bottom - radius, rect.Left, rect.Top + radius)
roundrect.Addarc(rect.Left, rect.Top, radius * 2, radius * 2,180,90)
Return roundrect
End Function

Protected Overrides Sub OnPaint(byval pa as System.Windows.Form.PaintEventArgs)
MyBase.OnPaint(pa)
Dim new_rectangle As rectangle = Me.Clientrectangle
new_rectangle.Inflate(-3,-3)
Dim ButtonPath As GraphicsPath = GetRoundedPath(new_rectangle, 10)
pa.Graphics.SmoothingMode = Smoothing.Antialias
pa.Graphics.DrawPath(New Per(Color.Gray, 4), buttonpath)
Me.region = New
System.Drawing.Region(buttonpath)
End Sub

Nessun commento: