Non mi ricordo la tecnica...
Ecco: il Top viene ottenuto dal risultato intero della divisione del numero ordinale della casella per il numero di caselle in una riga, mentre il Left viene ottenuto dal risultato del modulo del numero ordinale della casella per il numero di caselle in una riga.
Mi pare che sia così...
Non precipitiamo... Facciamo ora una semplice colonna di caselle (TextBox)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For n = 0 To 9 Dim txt As New TextBox txt.Top = txt.Height * (n / 1) Controls.Add(txt) Next End SubEcco: ho voluto aggiungere a runtime dieci TextBoxes impilate, con righe della lunghezza di 1.
Ora provo con righe di tre elementi.
E mi viene una porcheria! Grazie! Ho scordato di rendere intero il risultato della divisione! Finchè la divisione era per uno, il risultato era necessariamente intero, essendo rappresentato dal dividendo pari pari... ma adesso, dividendo per un numero diverso, viene fuori la cavolata!
Ricordo vagamente uno slash inverso come operatore di divisione intera... ricordo bene?
Sembrerebbe proprio di sì!
E infatti:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For n = 0 To 9 Dim txt As New TextBox txt.Top = txt.Height * (n \ 3) txt.Left = txt.Width * (n Mod 3) Controls.Add(txt) Next End Sub...adesso riesce tutto alla perfezione:
Nessun commento:
Posta un commento