Appunti di Programmazione

Cambiare sagoma alla Form

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:

Form normale

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

Forma con sagoma circolare

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

Form con sagoma a stella

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.