Creazione dinamica controlli

di il
31 risposte

Creazione dinamica controlli

Salve a tutti, vorrei sapere gentilmente come fare, in vb.net, per creare controlli(nel mio caso label) in modo dinamico,nello specifico io ho un form e leggo da file dei dati ora vorrei mettere questi dati in varie label, però non so a priori quanti dati ci sono nel file, quindi vorrei che il form all'inizio ha una sola label e poi ogni volta che si esegue la lettura sul file del dato si crea automaticamente un'altra label e ci inserisca il dato al suo interno .
Grazie mille per le risposte

31 Risposte

  • Re: Creazione dinamica controlli

    Nessuno mi può aiutare??
  • Re: Creazione dinamica controlli

    Ciao dna_programmer,
    ecco qua:
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim label As Label = New Label
            label.Text = "hello"
            label.Location = New Point(10, 10)
            Controls.Add(label)
        End Sub
    
    In questo esempio ho messo il codice all' interno della funzione di risposta di un bottone, quando lo premi ti apparirà la label. Poi quel codice lo puoi mettere dove ne hai bisogno.
  • Re: Creazione dinamica controlli

    Ciao, una domanda ma se ogni volta che clikko sul bottone si crea una label non bisogna cambiare ogni volta il nome, cioè in uno stesso form ci possono anche stare più oggetti con lo stesso nome?
  • Re: Creazione dinamica controlli

    Il nome della property non ha importanza e come vedi la property Name della label non è stata usata (cioè non è stato scritto label.Name="label1").
    È stata dichiarata una variabile locale di nome 'label' ma questo nome ha visibilità solo in quel blocco di codice.
  • Re: Creazione dinamica controlli

    E quindi in poche parole le label che si andranno a creare che nome avranno
  • Re: Creazione dinamica controlli

    Non lo avranno! A questo punto sorge la domanda ma come le uso? Beh, una label dopo che l' hai creata, le hai messo un testo e l' hai visualizzata in genere non la devi più toccare. Se invece vuoi manipolarla in seguito, ti devi tenere dei riferimenti. Invece di crearla e essegnarla ad una variabile locale, che verrà persa, puoi usare un campo del form, o tenerti un array con le label che hai creato.
  • Re: Creazione dinamica controlli

    E quindi sostanzialmente avranno un nome di default, se ho capito bene, che genera lui automaticamente
  • Re: Creazione dinamica controlli

    No, se provi col debugger a guardare il campo Name della label che hai creato vedrai che vale stringa vuota.

    Il campo Name serve solo al compilatore quando a design-time inserisci dei controlli. Con quel nome il compilatore genera delle variabili all' interno del tuo form, in pratica scrive del codice al posto tuo. Di questo non te ne rendi conto pur usandolo continuamente, ... ma non vorrei confonderti.
  • Re: Creazione dinamica controlli

    Ciao dna_programmer,
    giusto per non lasciare le cose avvolte nel mistero, completo la spiegazione.

    Tu normalmente inserisci una label nel form e poi nel codice scrivi cose del tipo:
    
    label1.Text = "qualcosa"
    
    Ti sei mai chiesto cosa è 'label1' ? Dove viene dichiarata questa variabile che puoi usare nel form?
    Se quardi bene nel form non c' è nessuna dichiarazione di label1.

    Però sai che in NetFramework una classe può essere dichiarata 'partial' ovvero ne puoi scrivere un pezzo in un file e un pezzo in un altro. Ora se vai a guardare nel file 'Form1.Designer.vb' (che non viene mostrato nel progetto ma che esiste) troverai il secondo pezzo della classe 'Form1' e vi troverai dichiarata la variabile 'label1' assieme a un mucchio di altre cose. È tutto codice che il Visual Studio ha scritto al posto tuo prima di compilare il programma.
  • Re: Creazione dinamica controlli

    Io di solito quando inserisco una label in un form non lo faccio da codice ma dalla casella degli strumenti e poi modifico il campo name, ad esempio lbl_nome ecc. Non ho capito bene il tuo discorso, cioè label1 non sarebbe il nome che io gli assegno?
  • Re: Creazione dinamica controlli

    Di solito una label non la modifichi, però supponiamo che premendo un bottone tu ne voglia cambiare il testo, nel codice scriverai:
    
    label1.Text = "ciao"
    
    La domanda che ti faccio è: in quel codice 'label1' cosa è dal punto di vista della sintassi?

    ... risposta è una variabile.

    Altra domanda: dove è stata dichiarata quella variabile?

    ... la risposta l' ho scritta prima

    Ora vado, se ti interessa possiamo proseguire. Anche su uno vive felice e programma benone anche senza queste cose
  • Re: Creazione dinamica controlli

    Comunque ho provato il codice che hai postato solo che di label ne crea solo una, com'è?
  • Re: Creazione dinamica controlli

    Quel codice ogni volta che premi il bottone crea una label sempre con lo stesso testo e nella stessa posizione, per cui se lo premi 10 volte avrai 10 label sovrapposte e ne vedrai una sola. Era solo un esempio, devi adattarlo al tuo programma.
  • Re: Creazione dinamica controlli

    No perché, ho cambiato i valori del metodo location mettendoci una variabile che a ogni ciclo aumenta di 10 ma di label c'è né sempre una
Devi accedere o registrarti per scrivere nel forum
31 risposte