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 ClassEcco 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 Classche 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 Classcon 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