Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560

    [VB.NET] Riferimento ai controlli di un altro form

    Salute a tutti!

    Non riesco a fare riferimento ai controlli dei altri form non attivi al momento.

    Ho due form in un progetto VB.NET e vorrei recuperare il contenuto di una TextBox (txtID) del form frmUno e copiarlo nella TextBox txtCod del form frmDue.
    Allora dal frmUno apro il nuovo form con

    Dim f As New frmDue
    f.Show()

    ora se da frmDue voglio referenziare la textbox come faccio?

    frmUno.textID.text

    naturalemente non funziona...

    Domanda 1
    Dovrei riferirmi all'istanza dell'oggetto frmUno, ma se è il form
    principale lanciato dall'applicazione?

    Domanda 2
    Devo rendere Public l'istanza di frmUno prima di farci riferimento?

    Grazie per il vostro tempo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Quando crei un form, per visualizzarlo devi richiamare il metodo Show usando il suo riferimento, memorizzato in una variabile; attraverso quella variabile, puoi tranquillamente accedere a qualsiasi componente o controllo inserito all'interno del form.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Si infatti, usando l'esempio del post prec., usando f. posso "aarivare" a tutti i controlli dallo stesso form, ma non riesco a farlo da altri form. Ho provato anche a rendere f public ma nada...

    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da ghini76
    Si infatti, usando l'esempio del post prec., usando f. posso "aarivare" a tutti i controlli dallo stesso form, ma non riesco a farlo da altri form. Ho provato anche a rendere f public ma nada...
    Credo di aver capito il problema. Puoi sempre inserire nel form secondario una variabile pubblica in grado di contenere il riferimento al form chiamante; il form chiamante, quindi, prima di visualizzare il form secondario, copierà il proprio riferimento all'interno della variabile affinchè il form secondario possa utilizzarla per avere appunto un riferimento al form chiamante e accedere così ai suoi membri (variabili, componenti, controlli, metodi e così via).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    OK, grazie, ma come faccio a far "contenere il riferimento al form chiamante" nella variabile pubblica del form secondario?
    Mi puoi fare un esempio?

    Grazie mille

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da ghini76
    OK, grazie, ma come faccio a far "contenere il riferimento al form chiamante" nella variabile pubblica del form secondario?
    Mi puoi fare un esempio?
    Ci provo, dato che VB.NET non è decisamente il mio linguaggio preferito per la programmazione su dotNET.

    Se hai
    codice:
    Class FirstForm
      Public dummyText As TextBox
    End Class
    e da questo form vuoi richiamare la form secondaria, puoi inserire nella classe di quest'ultima

    codice:
    Class SecondForm
      Public callingForm As FirstForm
    End Class
    Quando richiami la form secondaria, scrivi qualcosa del tipo
    codice:
    Dim frm As New SecondForm()
    frm.callingForm = Me
    frm.Show()
    In questo modo, inizializzi il riferimento alla form chiamante per il form secondario e lo rendi in grado, una volta visualizzato, di accedere ai membri del form primario; ad esempio, in questo modo
    codice:
    callingForm.dummyText.Text = "Testo di esempio"
    Il codice non è verificato, quindi dovresti modificarlo opportunamente a livello sintattico, sostituendo inoltre i nomi degli identificatori con i tuoi.

    Ho chiarito meglio il concetto questa volta?

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Decisamente si! Sei stato preziosissimo.

    Grazie mille anora

  8. #8
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Perfetto funziona benissimo. Solo una cosa vorrei chiederti ancora.

    Questo sistema è molto utile e versatile quando si devono utilizzare più oggetti del callingForm.

    Per quando mi devo riferire solo ad un oggetto consuma troppe risorse?
    Se devo riferirmi ad un solo oggetto mi conviene dichiarare una variabile pubblica e schiffarci dentro il contenuto per consumare meno memoria o è lo stesso?

    In sostanza... CallingForm è solo un "collegamento" o contiene tutti i dati relativi delle variabili, dei componenti e dei controlli?

    Grazie tanto tanto tanto

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da ghini76
    In sostanza... CallingForm è solo un "collegamento" o contiene tutti i dati relativi delle variabili, dei componenti e dei controlli?
    Il CallingForm in esame è un riferimento.

    Gli oggetti vengono creati all'interno dell'heap, un'area appositamente dedicata ad ospitare tutti i dati degli oggetti creati; ciascuna "variabile oggetto" contiene un riferimento che consente di risalire all'oggetto con i suoi dati; copiando un riferimento da una variabile ad un'altra, si sposta solamente il riferimento, appunto, e non viene creata una copia dell'oggetto.

    In un libro ho letto un esempio calzante che spiegava il concetto usando come analogia il televisore e il telecomando: quando vuoi cambiare canale, usi il telecomando; se vuoi spostarti nella stanza, per cambiare canale ti basta il telecomando, non devi girare con il televisore tra le braccia (alquanto pesante e scomodo, no?).

    La variabile pubblica CallingForm nel nostro esempio è un telecomando in più; occupa pochissime risorse e permette di riferirsi semplicemente ad un oggetto, senza fare copie dell'oggetto in questione.

    Se vuoi fare una prova tecnica, crea una form e copia il riferimento in una variabile e, da questa, ad un'altra variabile e imposta una proprietà del form usando una di queste...vedrai che leggendo la proprietà utilizzando l'altra variabile si otterrà il valore modificato, poichè sono entrambe riferimenti allo stesso oggetto creato.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Sei fantastico. Preciso ed esauriente.


    Grazie tante

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.