Da un form chiamare una sub in altro form

di il
15 risposte

Da un form chiamare una sub in altro form

Ciao a tutti

Ho una idea e stò valutando se è fattibile.

Ho un form Form1  con una DataGridView  e un form Form2  con una Sub che controlla i dati

Eventualmente i dati si trasferiscono attraverso un Modulo Public

E' possibile nel form Form1 eseguire una Sub che richiama la Sub di controllo su Form2?

Grazie per l'attenzione

Franco

15 Risposte

  • Re: Da un form chiamare una sub in altro form

    21/11/2025 - Frankq ha scritto:

    E' possibile nel form Form1 eseguire una Sub che richiama la Sub di controllo su Form2?

    La risposta è: . :)

  • Re: Da un form chiamare una sub in altro form

    Ti ringrazio per la sinteticità della tua risposta

    Franco

  • Re: Da un form chiamare una sub in altro form

    Cominciano i problemi

    Ho Form1 e Form2

    In Form1 ho un pulsante con queste istruzioni

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Form2.ImpostaProva("Papero")
            Form2.TextBox1.Focus()
            Form2.Show()
        End Sub
    End Class
    

    in Form2 ho una Textbox  e un pulsante 

    la Sub ImpostaProva riempie la textbox,  premendo il pulsante Controlla si effettuano i controlli

    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
        Public Sub ImpostaProva(mess As String)
            TextBox1.Text = mess
        End Sub
    
        Private Sub Controlla_Click(sender As Object, e As EventArgs) Handles Controlla.Click
         ' istruzioni di controllo
            Me.Hide()
    
        End Sub
    End Class

    Dopo che nel Form2 ho effettuato i controlli  come faccio a tornare in Form1    Button1_Click  dopo l'istruzione Form2.show?

    Franco

  • Re: Da un form chiamare una sub in altro form

    Non conosco VB.NET ma ritengo che il metodo Show() non termini il flusso di esecuzione della SUB Button1_CLick

    Lo Show visualizza la Form2 e continua con il flusso in Button1_Click, non attende che la Form in un qualche modo sia chiusa, nascosta o altro.

    Quindi la SUB Button1_Click termina la sua esecuzione dopo che la Form2 viene visualizzata, perchè lo Show è l'ultima istruzione.

    In altri linguaggi esiste il metodo "Form2.ShowModal()" che blocca l'esecuzione del flusso sino a quando la Form2 non viene "chiusa".
    Ma le "FORM modali" da quel che ne sò sono deprecate da Microsoft e quindi non sò se siano disponibili in VB.NET.

  • Re: Da un form chiamare una sub in altro form

    Pare che l'equivalente di showmodal per VB.net ShowDialog()

    La procedura lancia il form e alla chiusura prosegue con eventuali istruzioni del button1

  • Re: Da un form chiamare una sub in altro form

    Ma non è più semplice se le prime due istruzioni in Button1_Click le metti nell'evento Load (o Shown) di Form2 ?

  • Re: Da un form chiamare una sub in altro form

    23/11/2025 - grumpy ha scritto:

    Ma non è più semplice se le prime due istruzioni in Button1_Click le metti nell'evento Load (o Shown) di Form2 ?

    La seconda sicuramente, la prima no perchè ritengo che siano legati ai dati attinenti alla Form1 (anche se qui è una stringa).

    Generalmente io quando eseguo cose simili (cioè una presentazione di dati che deve essere confermata dall'utente), predispongo un record (struttura) di scambio che riempio prima e poi la Form (o la Dialogbox) se la carica durante lo Show. Alla chiusura, se il cliente ha modificato qualche cosa rimodifica il record (struttura) originale così che qualunque metodo possa usarlo.

  • Re: Da un form chiamare una sub in altro form

    Probabilmente non ho capito. Se i dati sono "attinenti" alla Form1 perché fare la validazione in un altra form ?  Quindi la Form2 ti serve soltanto per confermare i dati immessi nella Form1 ? Se fosse così basterebbe una richiesta di conferma con un MessageBox, ma sempre restando nella Form1.

  • Re: Da un form chiamare una sub in altro form

    23/11/2025 - grumpy ha scritto:

    Probabilmente non ho capito. Se i dati sono "attinenti" alla Form1 perché fare la validazione in un altra form ?  Quindi la Form2 ti serve soltanto per confermare i dati immessi nella Form1 ? Se fosse così basterebbe una richiesta di conferma con un MessageBox, ma sempre restando nella Form1.

    La spiegazione deve darla ovviamente @Frankq, ma generalmente si fà così per presentare i dati in forma aggregata o sintetica.

    Poi ognuno ha la sua tecnica che dipende anche dal settore.

  • Re: Da un form chiamare una sub in altro form

    23/11/2025 - Delphinium ha scritto:

    La spiegazione deve darla ovviamente @Frankq

    Ecco, appunto.

  • Re: Da un form chiamare una sub in altro form

    Buonasera a tutti e grazie per le risposte.

    Come dicevo nel primo post questo è un programmino di prova per vedere come far dialogare due form. 

    La soluzione è usare Form2.ShowDialog() al posto di Form2.Show()

    Form2 appare, esegue il suo lavoro e rende il controllo a Form1.

    Non ho ancora deciso come sviluppare il programma ma è stato interessante.

    Grazie a tutti per la partecipazione

    Franco

  • Re: Da un form chiamare una sub in altro form

    23/11/2025 - Frankq ha scritto:

    Non ho ancora deciso come sviluppare il programma ma è stato interessante.

    Si usa quando stai caricando un articolo e hai la necessità di crearlo in fase di carico. Messaggio "articolo non trovato vuoi caricarlo?" Al si ti apri il form articoli in inserimento e alla chiusura riporti l'id in una variabile da usare nel carico. O anche un cliente o fornitore, un metodo di pagamento ecc...

  • Re: Da un form chiamare una sub in altro form

    22/11/2025 - Frankq ha scritto:

    Ti ringrazio per la sinteticità della tua risposta

    La sinteticità della risposta era direttamente proporzionale alla genericità della domanda. :)

    22/11/2025 - Frankq ha scritto:

    In Form1 ho un pulsante con queste istruzioni
    Form2.TextBox1.Focus()

    Ho diversi suggerimenti:

    1. Creare istanze dei Form e non usare le classi: i nomi Form1 e Form2 sono identificatori che rappresentano la classe del Form, ossia il tipo di dato che definisce il comportamento di "una generica" Form1/Form2, ma di questi Form1 e Form2 potenzialmente ne potresti creare 1...N usando l'istruzione New.
      Il codice che hai scritto tu è valido solo grazie a un "escamotage" presente nel compilatore VB che ti accetta questa sintassi e fa un lavoro dietro le quinte per te, ma è fortemente sconsigliabile perché oltre a essere previsto solo per compatibilità all'indietro (retaggi del VB6), maschera concetti che devi conoscere per lavorare bene con .NET, ossia quelli della programmazione a oggetti (OOP).
    2. Non modificare direttamente controlli di un Form dal codice di un altro Form: crea una Sub nel form secondario (Form2) che accede ai controlli del medesimo Form e chiama quella Sub dall'altro Form (Form1); in questo modo si isolano le parti di "responsabilità" di ciascun Form e si evita una commistione che espandendo il progetto finisce per complicare estremamente l'architettura del codice a causa delle relazioni di interdipendenza tra le varie finestre e l'accesso dell'una a controlli specifici dell'altra (in alcuni casi, portando a non avere ben chiaro alla fine chi è che ha portato un certo controllo o componente in un determinato stato, visto che non c'è isolamento).
    3. Restituisci correttamente i valori di responso dalle finestre modali: quando chiami una finestra di dialogo con ShowDialog(), nella finestra chiamata usa la proprietà DialogResult per restituire un responso correttamente (conferma, annullamento, sì, no, ecc.) alla finestra chiamante.

    Tante altre informazioni si trovano nella documentazione di .NET e sono facilmente ricercabili tramite Google (o interagendo con un LLM qualsiasi).

  • Re: Da un form chiamare una sub in altro form

    Buongiorno

    Grazie Alka per i suggerimenti

    1.

    Per creare Form2 ho usato Vissual Studio; mi dici che potevo crearlo con Dim Form2 as New Form, ma poi i controlli  che devo inserire in Form2 dwevo crearli 

    con codice. Per me che vengo da VB6 è sembrata la soluzione più semplice

    2. Pienamente d'accordo 

    3. Mi sono letto la documentazione su ShowDialog, la applicherò

    Devo convertire dei programmi VB6/Win7  in VB.Net/Win10, ma non basta leggere le istruzioni e i controlli per applicarli con successo.

    Temo che dovro richiedere ancora il Vs aiuto

    Franco

Devi accedere o registrarti per scrivere nel forum
15 risposte