Dovresti scrivere che versione di visual basic usi perchè il modo per ottenere il risultato che cerchi cambia radicalmente.
Per quanti riguarda Visual Basic .NET (versione 2003, 2005, 2008 e presto 2010) si puo fare cosi:
Crea un nuovo progetto, nel form1 inserisci un button e poi copia questo codice, cancellando quello creato automaticamente.
Public Class Form1
Private nPulsanti As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
'chiedo quanti pulsanti inserire
nPulsanti = InputBox("Inserisci il numero di pulsanti", "Prova")
'creo un nuovo form vuoto
Dim f As New System.Windows.Forms.Form
'imposto alcune proprietà
f.Width = 400
f.Height = 400
f.StartPosition = FormStartPosition.CenterScreen
f.Text = "Questa è una prova"
'aggiungo un gestore degli eventi per gli eventi load e close del form
AddHandler f.Load, AddressOf FormLoad
AddHandler f.FormClosing, AddressOf FormClose
'visualizzo il form
f.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub FormLoad(ByVal sender As Object, ByVal e As EventArgs)
Try
'credo n bottoni
For n = 1 To nPulsanti
'creo un nuovo button
Dim b As New Button
'imposto il nome
b.Text = "Pulsante " & n
'imposto la posizione e la dimensione (chiaramente devi calcolare la posizione in base alla dimensione)
b.Left = 20
b.Width = 60
b.Height = 60
b.Top = 20 + ((n - 1) * 80)
'per poter gestire l'evento click del button bisogna inserire un gestore degli eventi
AddHandler b.Click, AddressOf buttonClick
'inserisco il button all'interno del form
CType(sender, Form).Controls.Add(b)
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
'gestore degli eventi per l'evento formclosing del form
Private Sub FormClose(ByVal sender As Object, ByVal e As FormClosingEventArgs)
Try
'tolgo i gestori degli eventi inseriti
RemoveHandler CType(sender, Form).Load, AddressOf FormLoad
RemoveHandler CType(sender, Form).FormClosing, AddressOf FormClose
For Each b As Control In CType(sender, Form).Controls
If TypeOf (b) Is Button Then
RemoveHandler b.Click, AddressOf ButtonClick
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
'gestore degli eventi per l'evento click del pulsante
Private Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs)
Try
MsgBox("Ciao mondo", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, CType(sender, Button).Text)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
Per quanti riguarda VB6 il procedimento è più macchinoso ma comunque possibile, bisogna creare un lista di commandbutton non visibile, carica n pulsanti con il comando Load nomepulsante(n), impostare le proprietà di visualizzazione (posizione e dimensione) e mettere la proprietà "visible" del pulsante creato uguale a True. Mi spiace ma vb6 non ce l'ho sottomano quindi niente codice.
Ciao