Passaggio array tra due form

di il
1 risposte

Passaggio array tra due form

Ciao a tutti,

Premetto che non sono molto esperto di c#.
Sto sviluppando un progettino per l'inserimento e la ricerca di ricette di cucina

Dal Form1 (form delle ricetta) apro il Form2 in cui è presente una lista generale di tutti gli ingredienti.
Nel Form2 seleziono gli ingredienti da usare nella ricetta, li salvo in un array e alla chiusura del Form2 vorrei che questo array fosse passato al Form1.
Il caricamento dell'array funziona correttamente, ma quando faccio Dispose del Form2 perdo le informazioni dato che vengono scaricati i dati in memoria.
Secondo voi come potrei fare ?

Grazie per la risposta
//Nel Form 1 quando premo il pulsante cmdApriListaIngredienti richiamo il Form2 dal metodo listaIngredienti
 
private void cmdApriListaIngredienti_Click(object sender, EventArgs e)
 {
               
     frmListaIngredienti f = new frmListaIngredienti();
     _Ingredienti = f.listaIngredienti();
     CaricaListaIngredienti();
                
}

// Nel Form 2 
	
	Il form viene visualizzato
	public string[] listaIngredienti ()
	{

	  this.ShowDialog();

	  return sIngredienti;
	}

//	Seleziono da una lista gli ingredienti e premo il pulsante cmdInsInRicetta. La procedura 
//scorre gli ingredienti checkati e valorizza l'array sIngredienti. 
//Dopo il this.Dispose() torna nella function listaIngredienti() ma a questo punto sIngredienti 
//ingredienti è null
	
        private void cmdInsInRicetta_Click(object sender, EventArgs e)
        {
            int i = 0;
            
            lsvIngredientiScelti.Items.Clear();
            string[] sIngredienti = new string[lsvIngredientiEsistenti.CheckedItems.Count];
            foreach (ListViewItem checkedItem in lsvIngredientiEsistenti.CheckedItems)
            {
                sIngredienti[i] = checkedItem.Text;
                i++;
            }
            this.Dispose();            
        }

1 Risposte

  • Re: Passaggio array tra due form

    Salve Pit77, ho avuto anch’io un problema simile, secondo me la chiamata a ShowDialog l’hai fatta in maniera sbagliata, come ho fatto io puoi avere un controllo maggiore del perché il Form2 è stato chiuso.
    Ti posto una parte del codice di Form1
    
    private void btnPesa_Click(object sender, EventArgs e) {
        //…
        frmPesaInfo frm2 = new frmPesaInfo(ntC);
        DialogResult dRes = frm2.ShowDialog();
        switch (dRes) {
            case DialogResult.Cancel:
            case DialogResult.Ignore:
                break;
            case DialogResult.Abort:
                this.puoPesare = false;
                break;
            case DialogResult.Retry:
                ntC = frm2.NoteColl;
                this.isDirty = true;
                break;
            default:
                MessageBox.Show(dRes.ToString());
                break;
        }
        //…
    }
    
    Come vedi il mio frmPesaInfo corrisponderebbe al tuo frmListaIngredienti (Form2), ma nel mio caso Form1 passa l’oggetto ntC (è una specie di List) a frmPesaInfo ed una volta corretti i dati, li ripassa a Form1. Gli ho creato un altro costruttore apposito (ovviamente che chiama quello senza parametri per la questione di InitializeComponent). NoteColl dovrebbe corrispondere alla tua sIngredienti, però per la fretta e per semplicità l’ho lasciata public.

    Ovviamente frmPesaInfo è un complesso MessageBox con i 3 pulsanti
    
    private void btnAggiorna_Click(object sender, EventArgs e) {
        // …
        this.DialogResult = DialogResult.Retry;//come ultima istruzione: chiude il form col relativo motivo
    }
    
    private void btnSalta_Click(object sender, EventArgs e) {
        // …
        this.DialogResult = DialogResult.Ignore;
    }
    
    private void btnStop_Click(object sender, EventArgs e) {
        // …
        this.DialogResult = DialogResult.Abort;
    }
    
    Beh, puoi benissimo gestirtelo in un’altra maniera, il mio caso può essere diverso dal tuo!
Devi accedere o registrarti per scrivere nel forum
1 risposte