Vi è mai capitato di volere una Form con una sagoma diversa dalla solita forma quadrata o rettangolare ?
Con poche linee di codice si può "modellare" a piacimento il contorno di un qualunque controllo.
Vediamo come.
Avviate un nuovo progetto "Windows Form" di dimensione 300x300 pixel e inseritevi qualche controllo alla rinfusa senza badare troppo alla precisione, l'importante è riempire l'area della nostra Form; coloriamo lo sfondo con un bella tinta vivace (io ho scelto il verde), piùo meno in questo modo:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim nuovaSagoma As Region Dim formaSagoma As Drawing2D.GraphicsPath formaSagoma = New Drawing2D.GraphicsPath() formaSagoma.AddEllipse(0, 0, 300, 300) nuovaSagoma = New Region(formaSagoma) Me.Region = nuovaSagoma formaSagoma.Dispose() End Sub End Class
Oppure:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim nuovaSagoma As Region Dim formaSagoma As Drawing2D.GraphicsPath Dim punti(9) As Point punti(0) = New Point(149, 0) punti(1) = New Point(100, 95) punti(2) = New Point(0, 113) punti(3) = New Point(70, 193) punti(4) = New Point(55, 299) punti(5) = New Point(149, 254) punti(6) = New Point(244, 299) punti(7) = New Point(229, 193) punti(8) = New Point(299, 113) punti(9) = New Point(199, 95) formaSagoma = New Drawing2D.GraphicsPath() formaSagoma.AddPolygon(punti) nuovaSagoma = New Region(formaSagoma) Me.Region = nuovaSagoma formaSagoma.Dispose() End Sub End Class
I due piccoli listati differiscono soltanto per la definizione della sagoma finale, ellittico nel primo caso e a stella nell'altro, per il resto sono uguali.
Si tratta di definire una nuova Regione, cioè quella zona visibile di ogni controllo, e associarle una nuova forma che viene specificata attraverso la classe GraphicsPath.
'Definisce la variabile come istanza della classe Region
Dim nuovaSagoma As Region
'Definisce la variabile come istanza della classe GraphicsPath
Dim formaSagoma As Drawing2D.GraphicsPath
'Imposta la nuova forma (Ellittica)
formaSagoma = New Drawing2D.GraphicsPath()
formaSagoma.AddEllipse(0, 0, 300, 300)
'Imposta la nuova regione con la forma definita in "formaSagoma"
nuovaSagoma = New Region(formaSagoma)
'Associa la nuova forma alla Form
Me.Region = nuovaSagoma
'Rilascia le risorse occupate dall'istanza di GraphicsPath.
formaSagoma.Dispose()
Un piccolo consiglio: fate in modo di lasciare in vista almeno una parte della barra alta della finestra, quella che contiene il titolo e i tre pulsanti di riduzione a icona, ingrandimento e chiusura dell'applicazione, poiché senza di essa non si può usare il mouse per spostare la form sullo schermo.