Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [VB.NET] - Creare controlli in modo dinamico

    Vorrei creare un numero non definito di controlli (label e textbox), ma non riesco. Me ne visualizza sempre 1.

    Mettiamo che per esempio volessi creare 10 Label, ecco come farei:

    codice:
    For i = 0 To 9
    
    Dim lbl As New Label
    
    lbl.name = "label_" & i
    lbl.text = "Prova"
    ' e di seguito le varie proprietà
    
    Me.Controls.Add(lbl)
    
    Next
    Come devo modificare questo codice in modo che mi crei 10 Label anzichè una sola?

    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Prova a separare la creazione del controllo (con New) dalla dichiarazione della variabile.

    codice:
    Dim lbl As Label
    
    For i = 0 To 9
      lbl = New Label()
    
      lbl.name = "label_" & i
      lbl.text = "Prova"
      ' e di seguito le varie proprietà
    
      Me.Controls.Add(lbl)
    
    Next
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Non va

    Ho notato che inserisce solo la prima Label.

    Infatti ho provato a mettere come proprietà Text
    codice:
    lbl.text = "prova_" & i
    e viene fuori: prova_0

    Percui crea solo la prima Label, le altre no

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    guarda a prima impatto visivo (non ho avuto il tempo di provare il codice) mi sembra tutto corretto. Non è che per caso in realtà il codice da te postato inserisce 10 label tutte una sotto l'altra e tu vedi solo la prima? (nn offenderti... io lo chiedo... nn si sa mai! può capitare a tutti una svista )
    in ogni caso il codice mi sembra corretto.
    hai provato a inserire un Panel e ad aggiungere le label al Panel?

  5. #5
    Originariamente inviato da arthas83
    guarda a prima impatto visivo (non ho avuto il tempo di provare il codice) mi sembra tutto corretto. Non è che per caso in realtà il codice da te postato inserisce 10 label tutte una sotto l'altra e tu vedi solo la prima? (nn offenderti... io lo chiedo... nn si sa mai! può capitare a tutti una svista )
    in ogni caso il codice mi sembra corretto.
    hai provato a inserire un Panel e ad aggiungere le label al Panel?
    Pare anche a me. Inutile usare dei panel, basta modificare l'ascissa o l'ordinata della label:
    codice:
    For I As Int32 = 0 To 9
      lbl = New Label
      lbl.Name = "prova" & I
      lbl.Text = lbl.Name
      lbl.Position = New Point(8, 16 * (I + 1))
    Next

  6. #6
    Ci ho pensato anch'io al fatto della sovrapposizione degli oggetti, ed ho inserito la proprietà Location. Di seguito il codice:

    codice:
    Dim y As Integer = 40
            Dim lbl As Label
            Dim lbl_name As String
            For i = 0 To 9
                lbl = New Label()
                lbl_name = "lbl_" & i
                y += 10
                lbl.Location = New Point(10, y)
                lbl.Name = lbl_name
                lbl.Text = lbl_name
                Me.Controls.Add(lbl)
            Next
    Non dovrebbero esser sovrapposte in questo modo, e poi anche se lo fossero, l'ultima label (cioè quella visibile) dovrebbe esser la decima, non la prima

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    sì infatti... è quello che pensavo io, anche se nel codice postato da ciri_sn_solo_io c'era una riga di commento

    ' e di seguito le varie proprietà

    magari cambia lì la posizione... certo su panel hai ragione... per come li aggiunge a panel li deve aggiungere alla form...

    boh...

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Dove è localizzato il codice di generazione dei controlli Label?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Nel form load

    Ho provato anche a fare questo controllo dopo aver aggiunto la Label:
    codice:
    If (lbl.Created) Then
                    MessageBox.Show("Label creato: " & i)
    End If
    E lui mi dice che li crea tutti (mi escono tanti Messagebox quanti sono le label create). Però poi se ne vede sempre e solo una

    EDIT:

    Ho provato con i CheckBox e me li crea perfettamente.

    Il mistero rimane con le Label, mah

  10. #10
    Raga, se non avete più suggerimenti sulle Label, non importa. Avrei un'altra priorità in questo momento, ovvero:

    ho creato dinamicamente (con un codice simile a quello precedente) dei checkBox, ma ora come posso utilizzarli?

    Cioè, da codice creo i seguenti checkbox (con un ciclo for):

    cb_1
    cb_2
    cb_3
    cb_4
    cb_5
    ecc ecc..

    Ora vorrei controllare se sono stati selezionati ed in caso affermativo fare delle operazioni, però io non so quanti checkbox ci sono (perchè il numero cambia ogni volta), percui non posso scrivere:

    codice:
    if cb_1.checked then
    ' codice
    end if
    Io so solo che tutti i checkbox cominciano con cb_ ed il numero cambia in base al ciclo for.

    Mi servirebbe poter fare una cosa del genere, in parole povere:
    codice:
    For i = 0 To 9
    if (cb_i.checked) then
    ' codice
    end if
    next
    Avete qualche idea?

    Grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.