Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212

    [C#] Passaggio ID tra vari form.

    Salve a tuti, ho da poco cominciato a lavorare con c# e la creazione di applicazioni windows.
    Mi si pone un problema riguardo il passaggio di un ID tra 2 Form

    Ho in pratica 2 form, "Form1" e "Form2".
    In "Form1" ho una ListView con i miei record elencati e quando clicco 2 volte su di un record voglio che mi si apre "Form2" per visualizzare i dettagli del record selezionato.
    Quindi ho agito in questo modo:

    Questa è una sintesi di Form2, piu' o meno:

    private string _IDCliente;

    public class Form2 : System.Windows.Forms.Form
    {
    public Form2()
    {
    InitializeComponent();
    MessageBox.Show(_IDCliente);
    }

    public string IDCliente {
    get {
    return _IDCliente;
    }
    set {
    _IDCliente = value;
    }
    }
    }


    In "Form1" sul DoubleClick della ListView:

    void ListView1DoubleClick(object sender, System.EventArgs e)
    {
    Form2 f2 = new Form2();
    f2.IDCliente = this.listRegistrati.SelectedItems[0].Tag.ToString();
    f2.Show();
    }

    Perche' La messageBox in "Form2" ( MessageBox.Show(_IDCliente); )
    non mi visualiozza nulla?
    Dovrebbe visualizzarmi il valore che ho passato?
    Inoltre se metto una messageBox in "public string IDCliente" sempre in "Form2" mi visualizza value.. quindi il parametro viene passato..

    Spero di essere statpo chiaro e che qualcuno mi riesca a dare un indicazione su come muovermi per passare parametri tra vari form o una soluzione...

    Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212
    ...forse non è chiaro il modo in cui ho esposto il mio problema...
    In pratica mi interessa passare da un form all'altro il valore di una variabile, con quqale tecnica si fa questa cosa?
    come posso fare?

  3. #3

    Re: [C#] Passaggio ID tra vari form.

    Se analizziamo il sorgente, possiamo notare che al momento del new della Form2, il programma passa nel costruttore della Form:
    Fa la InitializeComponent e successivamente la MessageBox, che logicamente visualizza una stringa vuota.

    Quindi terminato il costruttore, il programma torna nell'evento ListView1DoubleClick e assegna il valore alla variabile _IDCliente.

    Da ora in poi la variabile privata in _IDCliente contiene il valore corretto.

    In questi casi, e' piu' facile fare un overload del costruttore e passare il codice IDCliente come parametro in questo modo

    codice:
       public Form2(string idCliente)
       {
          InitializeComponent();
          _IDCliente = idCliente;
          MessageBox.Show(_IDCliente);
       }

  4. #4
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212
    Ti ringrazio, ho seguito il tuo consiglio e tutto funziona perfettamente.

    Adesso se puoi ti chiederei un'altro piccolo aiutino.
    Ho visualizzato il form 2 con il record da modificare e un tasto mi esegue la modifica.
    Come faccio dopo ExecuteNonQuery a chiudere il form2 e a fare il refresh sulla ListView del Form1?
    Grazie ancora!

  5. #5
    codice:
    		void ListView1DoubleClick(object sender, System.EventArgs e) 
    		{ 
    			Form2 f2 = new Form2(); 
    			f2.IDCliente = this.listRegistrati.SelectedItems[0].Tag.ToString(); 
    			f2.Closed+=new EventHandler(f2_Closed); 
    			f2.Show(); 
    		} 
    
    		private void f2_Closed(object sender, EventArgs e)
    		{
    			// Codice per fare l'update.
    		}
    Puoi metterlo sia nell'evento di Close o in quello di Closing.
    Oppure, se devi passare dei parametri puoi definirti un nuovo evento con un tuo EventArgs

    Ciao

  6. #6
    Utente di HTML.it L'avatar di shaone
    Registrato dal
    Apr 2003
    Messaggi
    212
    Sei gentilissimo e di certo mi hai dato un input positivo la tua indicazione per altro problema.
    Il mio problema attuale però in pratica è che non so come eseguire il refresh o ricaricamento della form1.
    Ho fatto l'aggiornamento dsel database sul click di un pulsante
    pero' il record modificato non viene visualizzato nella ListView del form1 finchè non riavvio il programma.

    In pratica vorrei sapere quello che va inserito nella seguente funzione:

    private void f2_Closed(object sender, EventArgs e)
    {
    // Codice per fare l'update.
    }

    Grazie ancora!!

  7. #7
    Dipende in che modo popoli la listview.

    Quando il programma parte, ci sara' sicuramente un tuo metodo che riempira' la listview con i dati presi dal DB.

    Nell'evento di close dovrai richiamare la stessa procedura (cancellando i dati precedentemente memorizzati), oppure cercare nella listview il dato modificato e aggiornarlo.

    La listview e il DB sono entita' distinte e l'aggiornamento di uno non comporta il refresh dell'altro.

    Spero di aver inuito correttamente il problema


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.