Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Interazione fra form in VB.NET

    Salve, sono alle prese con VB.NET e non riesco a risolvere un problema riguardante l'interazione fra diversi form.

    In particolare, quando carico un form con il metodo ShowDialog , non riesco a trasferire un qualsiasi valore dal form in primo piano a quello sottostante.

    Per chiarire con un esempio, supponiamo che da Form1 lancio Form2 in modalità ShowDialog senza chiudere Form1.

    Form 2 contiene una Listbox da cui l'utente deve selezionare una voce che comparirà in una casella di testo del form sottostante (Form1).

    Dopo la selezione, Form2 si chiuderà automaticamente e l'utente tornerà a lavorare su Form1 che ora conterrà il valore selezionato in un'apposita casella.

    In Visual Basic 6.0, questa operazione era di una facilità estrema. Bastava, infatti, inserire il seguente codice nell'evento Double_Click della listbox presente in Form2:

    Form1.Text1.Text = Form2.List1.Text
    Unload Me

    Temo che in VB.NET le cose si complichino un po', dal momento che ogni volta che si fa riferimento ad un altro form e ai suoi oggetti, bisogna creare una nuova istanza dello stesso form.

    Nel mio caso, invece, Form1 è già aperto e quindi non ha senso creare una nuova istanza, dato che ciò significherebbe mostrare due volte lo stesso form sullo schermo.

    Sapete se esiste una soluzione al mio problema?

    Grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    261
    IL Form in vb net non è un Form .... ma è una classe , come effettivamente deve essere, anche in vb6 era una classe solo che il grosso del lavoro lo faceva vb ( perchè era indispensabile aiutare il programmatore "poco pratico" di programmazione), adesso lo devi fare tu...lavora come se lavorassi con una semplice classe e ti diventerà tutto più semplice.

  3. #3
    Supponendo che Form1 è il form principale e Form2 quello che viene chiamato in un secondo momento, si ha:
    codice:
    'apertura di form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f As New Form2
    
        f.Owner = Me
        f.ShowDialog()
    End Sub
    
    'in form2, per riferirsi a Form1:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f As Form1
    
        f = Me.Owner
    
        f.Textbox1.Text = "Modificato da Form2"
    End Sub
    In pratica non bisogna creare una nuova istanza di Form1, è necessario invece passare a Form2 il riferimento alla istanza di Form1. Ecco che ci viene in aiuto la proprietà Owner, che va impostata prima di chiamare il metodo ShowDialog.
    Chi non cerca trova.

  4. #4
    Grazie tas, sei stato chiarissimo. Il codice funziona perfettamente e risolve il mio problema.

    Originariamente inviato da tas
    Supponendo che Form1 è il form principale e Form2 quello che viene chiamato in un secondo momento, si ha:
    codice:
    'apertura di form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f As New Form2
    
        f.Owner = Me
        f.ShowDialog()
    End Sub
    
    'in form2, per riferirsi a Form1:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f As Form1
    
        f = Me.Owner
    
        f.Textbox1.Text = "Modificato da Form2"
    End Sub
    In pratica non bisogna creare una nuova istanza di Form1, è necessario invece passare a Form2 il riferimento alla istanza di Form1. Ecco che ci viene in aiuto la proprietà Owner, che va impostata prima di chiamare il metodo ShowDialog.

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.