Creare Form Non Rettangolari con Visual Studio 2008

Stato
Discussione chiusa ad ulteriori risposte.

DjDarkPrince87

Utente Silver
5 Dicembre 2007
85
2
0
68
[align=justify]Salve a tutti ragazzi, dopo la mia richiesta di aiuto su come cambiare forma ad un form o modificarlo, devo dire che che Predator mi ha aperto gli occhi spiegandomi alcune cose basilari che io non ne ero a conoscenza.. quindo lo ringrazio in quanto grazie alle sue delucidazioni sono riuscito a trovare la guida. Guida che io posterò per tutti coloro, che come me alle prime armi vorrebbero cambiare il form ma non sanno minimamente come fare. Allora senza troppe ciance iniziamo la spiegazione.

1-Per creare un form con forma personalizzata creeremo una immagine bitmap o jpeg o ancora meglio in png di forma non rettangolare.

2-Impostare un colore facile da ricordare nel Back Color nelle proprietà del form quindi magari (White) poichè successivamente lo dovremo rendere trasparente o per dirla tutta invisibile.

3-Impostare la proprietà FormBorderStyle su None.
Viene rimossa la barra del titolo dal form. Vengono anche rimosse le funzionalità fornite dalla barra del titolo, come la possibilità di chiudere e di spostare il form. Questo problema verrà risolto nel codice in un secondo momento.

4-Impostare la proprietà BackgroundImage del form sul file bitmap creato in precedenza. Non occorre aggiungere il file al sistema del progetto, poiché questa operazione è automatica quando si specifica il file come immagine di sfondo.

5-Impostare la proprietà TransparencyKey sul colore di sfondo del file bitmap.
Con questa proprietà si segnala all'applicazione quali parti del form saranno trasparenti.

Nota: È possibile che sui monitor impostati con un'intensità colore superiore a 24 bit si presentino problemi di visualizzazione, con la conseguenza che determinate parti del form non appaiano trasparenti nonostante l'impostazione della proprietà TransparencyKey. Per evitare questo problema, accertarsi che l'intensità colore del monitor sia impostata su un valore inferiore a 24 bit nel pannello di controllo Schermo. Nello sviluppo di applicazioni che prevedono l'applicazione della trasparenza, è opportuno informare gli utenti in merito a questo inconveniente.
Piccolo difetto che potrebbe capitare ma che posso sottilineare che a me mi da solo una striscietta bianca intorno al formr ma che nemmeno si vede.

6-Scrivere il codice per chiudere il form: Aggiungere un controllo Button al form e aggiungere codice per consentire all'utente di chiudere il form richiamando il metodo Close
Codice:
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles Button1.Click
   Me.Close()
End Sub

7-Codice per spostare il form: Creare una routine per spostare il form quando lo si trascina. Immettere codice simile a quello riportato di seguito per creare un nuovo oggetto Point. Questo codice avrà la funzione di una variabile quando si calcola come spostare il form. Il campo isMouseDown viene utilizzato per tenere traccia della pressione del pulsante del mouse. Il form verrà spostato solo mentre si tiene premuto il pulsante del mouse.
Codice:
Visual Basic
Private mouseOffset As Point
Private isMouseDown As Boolean = False

8-Creare un gestore eventi per l'evento MouseDown del form. Aggiungere al gestore il codice per consentire a un utente di fare clic in un punto qualsiasi del form per trascinarlo. Per informazioni dettagliate sulla creazione di gestori eventi, vedere Creazione di gestori di eventi in Progettazione Windows Form.
Immettere codice simile a quello riportato di seguito per assegnare coordinate alla variabile mouseOffset sulla base della posizione corrente del puntatore del mouse. Nel codice che segue la posizione di offset viene calcolata mediante le informazioni di sistema relative alle dimensioni del bordo (FrameBorderSize.Width) e all'altezza della barra del titolo (CaptionHeight). È necessario tenere conto di tali informazioni quando si esegue il test dell'offset, poiché alcune misurazioni vengono effettuate con l'area client, altre con le coordinate dello schermo. L'offset pertanto equivale allo spessore del bordo più l'altezza della didascalia più l'offset nell'area client del form.
Codice:
Visual Basic
Private Sub Form1_MouseDown(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles MyBase.MouseDown
    Dim xOffset As Integer
    Dim yOffset As Integer

    If e.Button = MouseButtons.Left Then
        xOffset = -e.X - SystemInformation.FrameBorderSize.Width
        yOffset = -e.Y - SystemInformation.CaptionHeight - _
                SystemInformation.FrameBorderSize.Height
        mouseOffset = New Point(xOffset, yOffset)
        isMouseDown = True
    End If
End Sub

9-Creare un gestore eventi per l'evento MouseMove del form.
Immettere codice simile a quello riportato di seguito. Quando si fa clic sul pulsante sinistro e si trascina il mouse, la proprietà Location del form viene impostata sulla nuova posizione.
Codice:
Visual Basic
Private Sub Form1_MouseMove(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles MyBase.MouseMove
    If isMouseDown Then
        Dim mousePos As Point = Control.MousePosition
        mousePos.Offset(mouseOffset.X, mouseOffset.Y)
        Location = mousePos
    End If
End Sub
[/align]

10-Creare un gestore eventi per l'evento MouseUp del form. Immettere codice simile a quello riportato di seguito.
Codice:
Visual Basic
Private Sub Form1_MouseUp(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles MyBase.MouseUp
    ' Changes the isMouseDown field so that the form does
    ' not move unless the user is pressing the left mouse button.
    If e.Button = MouseButtons.Left Then
        isMouseDown = False
    End If
End Sub

Vi allego inoltre una prova che ho fatto io.. ecco il sorgente..;) spero che la guida sia molto chiara in caso questo è il link originario buona programmazione amici miei!! ;)
 
Stato
Discussione chiusa ad ulteriori risposte.