ciao a tutti, sono nuovo qui e vi chiedo perdono se la mia domanda potrà sembrare stupida.
è possibile, in fase di esecuzione del programma, attraverso un comando, creare ad esempio una label?
se si come?
ciao a tutti, sono nuovo qui e vi chiedo perdono se la mia domanda potrà sembrare stupida.
è possibile, in fase di esecuzione del programma, attraverso un comando, creare ad esempio una label?
se si come?
qualcuno puo rispondere? basta anche un "no, non si puo fare"![]()
Ciao Artemio,
creare un controllo (ad esempio Label) partendo da zero è un pò laborioso rispetto ad un altro metodo, Load, che prevede però il disegno sulla form del primo controllo. Posto un esempio.
Inserisci il tutto nel modulo di una Form:
codice:'Crea una Label senza l'uso di matrice di controlli: Private WithEvents lblobj As Label '--------------------------------------------------- Private Sub Command1_Click() Dim lblobj As Label Dim lblobjev As Label Call Aggiungi_Label("lblRunTime", Me) Set lblobj = Oggetto("lblRunTime", Me) 'Proprietà della Label: lblobj.Left = 2000 lblobj.Top = 2000 lblobj.Visible = True lblobj.Alignment = 2 lblobj.AutoSize = True lblobj.Caption = "Prova di costruzione" lblobj.BackColor = &HE0E0E0 lblobj.ForeColor = &HFF& lblobj.BorderStyle = 1 lblobj.Left = 3100 lblobj.Top = 3100 End Sub '--------------------------------------------------- Public Sub Aggiungi_Label(sNome As String, NomeForm As Form) Dim lblControl1 As Label Set lblControl1 = NomeForm.Controls.Add("VB.Label", sNome) End Sub '--------------------------------------------------- Public Function Oggetto(sNome As String, NomeForm As Form) As Control Dim obj As Control For Each obj In NomeForm.Controls If obj.Name = sNome Then Set Oggetto = obj Exit For End If Next End Function![]()
LM
grazie mille!!!
l'ho appena provato e funziona... xo prima parlavi del metodo Load... questo che hai scritto sarebbe il Load?
a... c'e un'altro probcome devo fare se ne devo creare piu di una? ad esempio cliccando su un cmd vorrei che creasse ad esempio 2 label, e cliccando su un'altro cmd dovrebbe crearne tipo 3... come posso fare? grazie ancora!!! spero di non averti disturbato
mmm... nn so se esita un metodo migliore... ma per creare più label da un pulsante come scritto sopra... mi basta utilizzare un semplice ciclo giusto? xo mi sorge un'altro prob... nel codice ke mi hai scritto dov'è che definisce il name della label? in modo ke io possa modificarlo a mio piacimento... (se si può fare)
la soluzione di LMondi è ottima, e ti consente di creare un numero indefinito di controlli Label
ma io proporrei una seconda soluzione, che probabilmente ti agevolerà le cose, visto che poi la rintracciabilità del controllo è più agevole.
potresti utilizzare una Matrice di controlli Label
questa si ottiene, ponendo sul form un controllo Label che farà da "base" al quale assegnerai la proprietà Index = 0
questo controllo puoiache renderlo invisibile già in fase di progettazione.
mettiamo caso che la tua label di partenza si chiami Label1
nel momento in cui te ne serve una scrivi:
questa istruzione carica una nuova label con proprietà Index, ovvero con indice susseguente all'ultimo utilizzato.codice:Load Label1(Label1.UBound+1)
la label però rimarrà invisibile, quindi sarà necessario spostarla utilizzando le proprietà Left e Top e renderla visibile utilizzando la proprietà Visible = True
il vantaggio di questo metodo è che puoi già organizzare le routines di evento relative alla label "base" poichè tutte le label aggiunte condivideranno le stesse routines...
Boolean
@Boolean hmmm... ho capito come fare... e funziona... ma se io con un pulante volessi fargli creare ad esempio 100 label, dovrei scrivere 100 volte il codice
?codice:Load Label1(Label1.ubound + 1) Label1(1).Visible = True Label1(1).Top = 1000 Label1(1).Left = 1000
nient'affatto!
basta un semplice ciclo:
così avrai 100 label incolonnate una sotto l'altracodice:For K=1 to 100 Load Label1(Label1.ubound + 1) Label1(Label1.ubound).Visible = True Label1(Label1.ubound).Top = 1000 + ((K-1)*400) Label1(Label1.ubound).Left = 1000 Next K
Boolean
thx ho capito tutto...pensa ke all'inizio avevo provato pure io a fare un ciclo... ma il mio andava in loop![]()
per quello poi ti ho chiesto^^ la soluzione era più facile di quanto credessi... (ma da solo non ci sarei mai arrivato)
Grazie mille Boolean!