Module Funzioni Sub popola(Of T As New)(ByVal frm As Form, ByVal sinistra As Integer, ByVal alto As Integer, ByVal numero As Integer) Dim ogg As Object For n = 1 To numero ogg = New T With ogg .left = sinistra .top = alto + .height * (n Mod numero) If ogg.GetType().Name = "casella" Then .backcolor = Color.Cyan End With frm.Controls.Add(ogg) Next End Sub End ModuleBene. Ricordo una regola del C++, secondo la quale un puntatore si può definire di un tipo e si può istanziare di un tipo derivato... o qualcosa del genere.
Proviamo qualcosa del genere in VB.
Creo una classe casella che eredita da Label
Class casella Inherits Label Sub New() Text = "Ciao, ciccio" BorderStyle = Windows.Forms.BorderStyle.FixedSingle End Sub End ClassNel suo costruttore, questa classe inizializza il testo della casella e lo stile del bordo.
Quindi definisco la variabile come Label e la istanzio come casella
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim a As Label a = New casella Me.Controls.Add(a) End SubE funziona. Ecco il risultato, in cui al form viene aggiunta una casella con le proprietà Text e BorderStyle inizializzate secondo le direttive del costruttore:
Dunque questa regola vale anche in vb.
Devo rivederla compiutamente in C++ perchè ne ho una reminiscenza un po' vaga...
Nessun commento:
Posta un commento