JavascriptProva

martedì 6 agosto 2013

Disposizione di controlli in griglia su un form: creazione di una classe "griglia".

Ora torniamo all'applicazione Form.

Ripercorriamo le tappe della disposizione di una TextBox sul form.
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim casella As TextBox = New TextBox
        casella.Text = "fanqulo"
        Me.Controls.Add(casella)
    End Sub

End Class


Ripassiamo (a mente, senza sbirciare) il codice per disporle in griglia...

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For n As Integer = 0 To 41
            Dim casella As TextBox = New TextBox
            casella.Left = casella.Width * (n Mod 3)
            casella.Top = casella.Height * (n \ 3)
            casella.Text = n
            Me.Controls.Add(casella)

        Next
    End Sub

End Class
Ecco il risultato:


Benissimo!

Adesso cominciamo a rendere un po' "autonomo" e "flessibile" il codice...

Ecco il primo passo: creazione di una classe Griglia
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim miaGriglia As griglia = New griglia(Me)
        
    End Sub

End Class

Class griglia
    Sub New(ByRef myForm As Form)
        For n As Integer = 0 To 41
            Dim casella As TextBox = New TextBox
            casella.Left = casella.Width * (n Mod 3)
            casella.Top = casella.Height * (n \ 3)
            casella.Text = n
            myForm.Controls.Add(casella)
        Next
    End Sub
End Class
che funziona esattamente allo stesso modo di prima.
Con questa piccola modifica iniziale, può essere chiamata in seno a diversi form.
Adesso rendiamo flessibili, ovviamente, il numero delle caselle e la lunghezza delle varie righe.
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim miaGriglia As griglia = New griglia(Me, 42, 5)
        
    End Sub

End Class

Class griglia
    Sub New(ByRef myForm As Form, ByVal numCaselle As Integer, ByVal rowLength As Integer)
        For n As Integer = 0 To (numCaselle - 1)
            Dim casella As TextBox = New TextBox
            casella.Left = casella.Width * (n Mod rowLength)
            casella.Top = casella.Height * (n \ rowLength)
            casella.Text = n
            myForm.Controls.Add(casella)
        Next
    End Sub
End Class
con questo esempio, ottengo 42 caselle in file di 5.
Istanziando la classe con altri parametri...
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim miaGriglia As griglia = New griglia(Me, 60, 4)
        
    End Sub

End Class
...ottengo 60 caselle in file di 4, eccetera...
Ma adesso viene la sfida più appassionante e più "da ragionarci sopra", ossia la flessibilità per quanto riguarda il tipo di elementi da disporre in griglia, cessando di essere vincolati alle TextBoxes.
Per far questo, devo prendere dimestichezza con i Generics...

Nessun commento:

Posta un commento