Lavorare con multiform

di il
22 risposte

Lavorare con multiform

Salve, ho necessità di lavorare con più form, ma non riesco a modificare gli oggetti di un form dall'altro form, esempio scrivere su una textbox del fom1 dal form2, e non riesco nemmeno a richiamare un metodo scritto nel form dal form2.
Qualcuno mi può dare indicazioni.
Grazie.

22 Risposte

  • Re: Lavorare con multiform

    Nella form1:
    
    public TextBox txtCodice;
    form2 f2=new form2(); 
    f2.FormChiamante=this;
    f2.show();
    
    Nella form2:
    
    private Form formchiamante;
    public Form FormChiamante { get { return formchiamante; } set { formchiamante = value; } }
    ((form1)formchiamante).txtCodice.Text="asdfadfaf";
    
    Per i metodi segui lo stesso concetto.
  • Re: Lavorare con multiform

    Intanto grazie per la celere risposta.
    Ma stiamo parlando di c#?
    Perchè inserendo il tuo codice esce tutto rosso, quindi tutto un errore.

    Ho provato a correggere un pochino il codice ma continuano ad uscire errori:

    Allora per semplicità ho un form1 e un form2.

    nella form1 scrivo il seguente codice:
    
    private void button1_Click(object sender, EventArgs e)
            {
    
                Form2 form2 = new Form2();
                form2.Show();
                form2.scrivitxt = this;
                form2.Show();
    
            }
    
    In questo modo eseguo il codice alla pressione di un tasto

    nella form2 invece scrivo questo codice:
    
     private Form form1;
            public Form scrivitxt
            {
                get { return form1; }
                set { form1 = value; }
            }
    
    
    Non riesco ad inserire l'ultima riga del tuo codice, in quanto i viene comunque sottolineata come errore:
  • Re: Lavorare con multiform

    GianlucaB ha scritto:


    in quanto i viene
    i

    ??
  • Re: Lavorare con multiform

    Ti da rosso se non lo inserisci in dei gestori di eventi e non dichiari gli oggetti nel posto giusto...erano solo dritte da non CopiaIncollare.
    Certo che si tratta di c#, te lo posso garantire.
    L'ultima riga non la inserisci se non dichiari public la TextBox di form1 e cmq postala per vedere come l'hai scritta.
    Poi spiegami quel raddoppio di Form2.Show()
  • Re: Lavorare con multiform



    Come vedi l'ultima istruzione è tutta un errore
    Il form2.show raddoppiato è solo stata una svista
  • Re: Lavorare con multiform

    Ma quella linea non puoi scriverla dove vuoi. Devi inserirla in un gestore di eventi, un click di un button o altro.
  • Re: Lavorare con multiform

    Forse allora non ci ho capito nulla.
    Ma se la scrivo dentro ad un gestore di eventi, poi come la richiamo dall'altro form?

    Facciamola semplice, un button sul form1 ed una textbox sul form2.
    Avvio l'applicazione e apro tutti e due i form,( e questa è la cosa importante che mi mette in crisi, ovvero i form sono instanziati e aperti da subito) quindi vedrò un form1 con un pulsante ed un form2 con una textbox.
    Adesso voglio che al click sul pulsante del form1 compaia una testo nella textbox della form2, magari una stringa proprio passata dalla form1.

    Come fare?

    Grazie.
  • Re: Lavorare con multiform

    Devi sfruttare i concetti di OOP che ti consentirebbero di poter scrivere codice del genere senza problemi.

    Imposti nel Form2 un metodo pubblico che chiami ad esempio SetText e che accetta una stringa. Nel metodo imposti la textbox con la stringa passata. Nel Form1 chiami il metodo passando la stringa.

    Oppure ma non te lo consiglio, imposti il Textbox con visibilità pubblica
  • Re: Lavorare con multiform

    Scusate ma non funziona niente.
    Allora nella form1 c'è una textbox1 ed una funzione che scrive la stringa passata dentro a tale textbox1:
    
    public partial class Form1 : Form
        {
    
            Form2 form2 = new Form2();
            
    
            public Form1()
            {
                InitializeComponent();
                form2.Show();
            }
    
    
            public void scrivitxt(string testo)
            {
                textBox1.Text = testo;
            }             
    
          
        }
    
    
    
    nella form2 c'è un pulsante che richiama il metodo del form1.
    Ovviamente per vedere e quindi richiamare tale metodo devo instanziare un nuovo form1

     public partial class Form2 : Form
        {
    
            Form1 form1 = new Form1();
    
            public Form2()
            {
                InitializeComponent();
            }
    
         
    
            private void button1_Click(object sender, EventArgs e)
            {
                form1.scrivitxt("prova");
            }
        }
    
    adesso se avvio il programma succede questo:



    dove cavolo stò sbagliando?
  • Re: Lavorare con multiform

    Ti devi decidere ... Avevi detto che la textbox stava nel form2 ora sta nel form1... Se non dici chiaramente cosa fai una volta per tutte non ha senso risponderti.

    P.S. Cosa sarebbe scrivitxt usato in quel modo?

    P.P.S. Perché le due new e perché non hai seguito quello che ti è stato scritto di fare?
  • Re: Lavorare con multiform

    Voglio passare i dati tra gli oggetti dei form,
    quindi ad esempio far apparire in una textbox sul form1 una stringa passata dal form2, ma all'occorrenza anche far apparire in una textbox presente sul form2 la stringa passata dal form1.

    Insomma gli oggetti presenti nei 2 form dovranno passarsi i dati come se stessero tutti sullo stesso form, ecco quello che voglio fare.
  • Re: Lavorare con multiform

    Allora, dato che non conosci le tecniche corrette e che mi sembra inutile parlarne in un thread (anche perché nel forum non si tengono corso), devi iniziare a seguire le indicazioni della prima risposta.
  • Re: Lavorare con multiform

    Ho chiesto sul forum propio per capire quale è la tecnica corretta.
    Metodi, classi e quant'altro un pochino le conosco, ma in tutto questo mi sfugge sempre una cosa ovvero istanziare un nuovo oggetto mi sballa tutto e ti spiego perchè, così almeno vediamo se mi puoi aiutare.

    Rendere pubblici i vari oggetti è la prima cosa che avevo provato a fare, ma qualsiasi oggetto o metodo pubblico presente nel form1, non è comunque visibile dal form2, fino a quando nel form2 non creo un nuovo oggetto form1.
    Cioè io nel form2 non posso scrivere semplicemente form1.textbox1.Text="aaaa" perchè nel form2 la la textbox1 anche se pubblica non è visibile, fino a quando non creo prima un nuovo oggetto form1, ovvero fino a quando non scrivo:

    Form1 form1 = new form1;

    Quindi ritorniamo sempre al punto di partenza devo per forza di cose instanziare sempre un nuovo Form1, cosa che mi genera sempre l'errore di cui sopra.
    Quindi dove è nel mio ragionamento l'errore?
  • Re: Lavorare con multiform

    È da pochissimo che uso c# ma io per il passaggio dati faccio così, forse non sarà il modo migliore ma funziona. Vedi il pdf del link
    Sicuramente qualcuno ti potrà dare migliori indicazioni

    https://drive.google.com/open?id=1YKrzGWsI4rJM44wLJTSGFL1JQXlvAzB-

    vedi se si capisce
Devi accedere o registrarti per scrivere nel forum
22 risposte