Gestione Controlli Creati da codice

di il
11 risposte

Gestione Controlli Creati da codice

Buongiorno a tutti,

ho un problema con la gestione di una serie di alcune textbox create in automatico in fase di caricamente del form principale con il seguente codice:

For i=1 to 100
 Me.Controls.Add(txtb_N)
       txtb_N.Name = "txtb" & Format(i, "000").ToString
       txtb_N.Location = New Point(x, y)
       txtb_N.Size = New Size(80, 20)
Next
Me.Show

Ora vorei valorizzare il testo delle textbox ma non riesco perchè il controllo non essendo presente non posso gestirlo.

Se avessi aggiunto il controllo direttamente sul form  allora con 

TextBox1.Text = “pippo”  

e avrei risolto il problema ma creandole da codice non riesco.

Vorrei anche andare a gestire il click sulla textbox ma ho sempre lo stesso problema.

Ho provato a cercare qualche aiuto tra i vari forum, video, ecc….ma non ho trovato nulla.

Qualcuno di voi sa se si può fare e come?

Grazie.

Alberto

11 Risposte

  • Re: Gestione Controlli Creati da codice

    Ciao Albero

    e non ti fa fare ….

    txtb_N.Text = "Pippo"

    Non è sempre una proprietà del controllo ?

  • Re: Gestione Controlli Creati da codice

    04/05/2023 - Alberto75 ha scritto:


    ho un problema con la gestione di una serie di alcune textbox create in automatico in fase di caricamente del form principale con il seguente codice […]

    Questo codice non crea TextBox, ma semplicemente aggiunge N volte la stessa casella di testo alla collezione dei controlli del Form, andando a cambiarne il nome, la posizione e la dimensione a ogni iterazione, quindi per 100 volte.

    I controlli sono rappresentati da oggetti di tipo TextBox, e gli oggetti si creano con New().

    Vedi questo esempio.

  • Re: Gestione Controlli Creati da codice

    04/05/2023 - Alberto75 ha scritto:


    vorei valorizzare il testo delle textbox

    Sarà, nel modulo della Form

    Me.Controls("txtb001").Text = "Pippo"

    questo per la 1. Come generi il nome per inserirlo puoi farlo anche per referenziare la TextBox che ti interessa.

    04/05/2023 - Alberto75 ha scritto:


    Vorrei anche andare a gestire il click sulla textbox

    Nel ciclo, aggiungi l'handler (che avrai creato prima). Ad esempio:

    Crei un handler

        Private Sub txt_Click(sender As Object, e As EventArgs)
            MsgBox(TryCast(sender, TextBox).Name & " clickato")
        End Sub
    

    Crei la Textbox ed agganci l'handler con AddHandler

            Dim txt As TextBox
            For i As Integer = 1 To 10
                txt = New TextBox
                txt.Top = i * 30
                txt.Name = "Txt" & i
                AddHandler txt.Click, AddressOf txt_Click
                Me.Controls.Add(txt)
            Next
    
  • Re: Gestione Controlli Creati da codice

    04/05/2023 - By65Franco ha scritto:


    Non è sempre una proprietà del controllo ?

    La proprietà esiste. È la variabile txtb_N che in realtà non esiste. Quando aggiungi controlli a Design, VS crea una variabile, le assegna un nome e la dichiara nel codice. Se tu esplori la cartella in cui risiede il file nomeform.vb, vedrai che ne esiste un altro che si chiama nomeform.designer.vb.

    Aprilo e vedi cosa c'è dentro. Non modificarlo mai a mano (viene riscritto dall'IDE e rischi di fare pasticci). Ma prova, dopo che lo hai aperto la prima volta ed ispezionato a richiuderlo, aggiungere un controllo alla form e a riaprirlo. Confrontando prima e dopo, vedrai che tutte le modifiche fatte a livello visuale vengono tradotte in codice ed inserite nella Sub InitializeComponent. In fondo troverai delle Friends WithEvents che saranno i nomi che usi mentre sviluppi.

  • Re: Gestione Controlli Creati da codice

    04/05/2023 - Sgrubak ha scritto:


    04/05/2023 - By65Franco ha scritto:


    Non è sempre una proprietà del controllo ?

    La proprietà esiste. È la variabile txtb_N che in realtà non esiste. Quando aggiungi controlli a Design, VS crea una variabile, le assegna un nome e la dichiara nel codice. Se tu esplori la cartella in cui risiede il file nomeform.vb, vedrai che ne esiste un altro che si chiama nomeform.designer.vb.

    Aprilo e vedi cosa c'è dentro. Non modificarlo mai a mano (viene riscritto dall'IDE e rischi di fare pasticci). Ma prova, dopo che lo hai aperto la prima volta ed ispezionato a richiuderlo, aggiungere un controllo alla form e a riaprirlo. Confrontando prima e dopo, vedrai che tutte le modifiche fatte a livello visuale vengono tradotte in codice ed inserite nella Sub InitializeComponent. In fondo troverai delle Friends WithEvents che saranno i nomi che usi mentre sviluppi.

    E si…. ;)    txtb_N non esiste, gli oggetti vanno creati

  • Re: Gestione Controlli Creati da codice

    Ho creato i handler con AddHandler come suggerito da Sgrubak ed ho risolto.

    Fantastico!!!!

    Grazie mille.

  • Re: Gestione Controlli Creati da codice

    04/05/2023 - Alberto75 ha scritto:


    Ho creato i handler con AddHandler come suggerito da Sgrubak ed ho risolto.

    Perfetto, l'importante però è che tu abbia compreso la correzione di Alka che è fondamentale.

  • Re: Gestione Controlli Creati da codice

    Si certo, avevo già ben chiaro quello che mi ha detto Alka solo che non capivo come poter associare il click del mouse ad un oggetto che viene aggiunto da codice.

    Il codice che ho messo nel post era solo una parte , subito prima c'è la dchiarazione 

      Dim txtb_N As New System.Windows.Forms.TextBox

    Con il vostro aiuto sono riuscito a capire come fare questo tipo di gestione dinamica dei controlli che sicuramente applicherò anche ad altri programmi che avevo fatto ma inserende i controlli direttamente da IDE.

    Quindi….GRAZIEEEEEEE MILLE.

    Alberto

  • Re: Gestione Controlli Creati da codice

    Buongiorno, 

    ho incontrato un altro problema che, ovvimante, non riesco a risolvere!!!!!

    Parliamo sempre di gestione di controlli.

    Il programma esegue

     Me.Controls.Add(txtbA) e la proprietà Name è txtbA001

    ed anche 

     Me.Controls.Add(txtbP) e la proprietà Name è txtbP001

    ai quali ho associato ad entrambi lo stesso handler

    AddHandler txtbA.MouseDown, AddressOf txtb_Q_MouseDown

    AddHandler txtbP.MouseDown, AddressOf txtb_Q_MouseDown

    Quando clicco sul controllo txtbA001 eseguo la SUB  txtb_Q_MouseDown e ricevo come sender il controllo txtbA001.

    Ma come faccio ad andare a modificare il testo del controllo txtbP001 quando clicco sul controllo txtbA001?

    Ho fatto varie prove ma non riesco a farlo…forse mi sto perdendo in un “bicchiere d'acqua” ma non riesco a capire come fare?

    Grazie in anticipo per il vostro aiuto.

    Alberto

  • Re: Gestione Controlli Creati da codice

    Utilizza Controls("txtbP001") per ottenere un riferimento al controllo 

  • Re: Gestione Controlli Creati da codice

    Scusa Oregon se ti rispondo solo ora ma sono stato impegnato e non sono riuscito a provare quello che mi avevi detto di fare.

    Comunque funziona benissimo.

    Grazie mille.

    Alberto

Devi accedere o registrarti per scrivere nel forum
11 risposte