Comunicazione Tra Windows Form.

lunedì 28 marzo 2011 - 14.11
Tag Elenco Tags  C#

marcogetz Profilo | Newbie

Ciao a tutti, premetto che ho provato a cercare ma le soluzioni trovate nei thread non sono riuscito ad applicarle.

Ho un problema che a dirlo sembra banale, ma non riesco ad uscirne...

In una applicazione winform in C#:
Devo modificare il valore di una textbox nella form1 facendolo da form2 che è stata creata da form1 con un button.

scrivere da form1 a form2 è semplice, ma non riesco a trovare il modo per farlo al contrario.
Nel costruttore riesco a modificare la textbox... ma con altri metodi di form2? devo fare una reference pubblica?

L'unica idea che mi è venuta in mente è scrivermi una singleton per far comunicare i due, ma mi sembra davvero troppo per una textbox no?

Grazie per le eventuali risposte

Marco

AntCiar Profilo | Expert

>In una applicazione winform in C#:
>Devo modificare il valore di una textbox nella form1 facendolo
>da form2 che è stata creata da form1 con un button.
>
>scrivere da form1 a form2 è semplice, ma non riesco a trovare
>il modo per farlo al contrario.
>

Ciao. Quando devi aggiornare la textbox nella Form1? alla chiusura della Form2 oppure simultaneamente al cambio di valori nella form2?

Nel caso 1: Creati nella form2 una property che ti va a leggere il valore della texbox, oppure rendi pubblica textbox. Quando apri la form2 aprila in showdialog al alla e successivamente ti prendi il valore tramite la property.

2:
a) Passi alla form2 il riferimento alla textbox della form1 in modo da poter interagire.
b) rendendo pubblica la textbox sulla Form2, ascolti l'evento TextChange sulla Form2 e aggiorni di coseguenza la Form1

Cristian Barca

marcogetz Profilo | Newbie

Grazie della Risposta :)

Ora nel costruttore riesco a modificare il valore della textbox.

Ma se lo volessi fare con un atro metodo?

Giustamente mi dice che la variabile non esiste...

come faccio ad utilizzare il reference negli altri metodi?


Grazie per la pazienza

Marco

AntCiar Profilo | Expert

>Grazie della Risposta :)
>
>Ora nel costruttore riesco a modificare il valore della textbox.
>
>Ma se lo volessi fare con un atro metodo?
>
>Giustamente mi dice che la variabile non esiste...
>
>come faccio ad utilizzare il reference negli altri metodi?
>
>
>Grazie per la pazienza
>
>Marco

Così risulta un po difficile capire quello che fai perchè dovresti postare il codice che usi.
In allegato ti ho messo un piccolo progetto di esempio.
Ciao
Cristian Barca

marcogetz Profilo | Newbie

Scusami, effettivamente se non spiego bene il contesto è difficile capire...

Allora nell Form1 ho:
un bottone che mi lancia un'altra form... quella

private void ButtonOpenForm2_Click(object sender, EventArgs e)
{

Form2 nuovodainv = new Form2(ref nomedellatextboxinform1);
nuovodainv.Show();

}

Nella Form2 ho il costruttore che accetta il reference:

public inserimentoCliente(ref TextBox textdaform1) {

InitializeComponent();
textdaform1.Text = "BlaBlaBla";


}


Quindi sono nella situazione che: se nel costruttore invoco textdaform1 la posso modificare e la modifica è istantanea anche nel Form1, ma giustamente non posso usarla al di fuori del costruttore, e a me servirebbe poterla modificare negli altri metodi di Form2 (che è una Form complessa con campi da riempire e bottone per la conferma finale che poi dovrebbe dare indietro una stringa in pasto a form1.

Spero ora sia più chiaro.

Grazie dell'aiuto

Marco

AntCiar Profilo | Expert

Ciao. Basta che aggiungi una variabile globale di tipo TextBox nella Form2 e la valorizzi dal costruttore. In questo modo è disponibile per qualsiasi metodo della Form2.

TextBox txb2 = null;

public inserimentoCliente(ref TextBox textdaform1) {
InitializeComponent();

txb2 = textdaform1;
}


poi dove ti serve modificare il valore basta che fai: txb2.text = "................"
Cristian Barca

marcogetz Profilo | Newbie

Era una cosa talmente stupida che non l'ho fatta...

Chiedo Scusa per la banalità della domanda......

Ero li a pensare di Fare un Singleton quando mi bastava dichiarare una globale.....

Grazie mille....

Codare troppo non mi fa bene ahahahahahahha

Marco

AntCiar Profilo | Expert

>Era una cosa talmente stupida che non l'ho fatta...
>
>Chiedo Scusa per la banalità della domanda......
>
>Ero li a pensare di Fare un Singleton quando mi bastava dichiarare
>una globale.....
>
>Grazie mille....
>
>Codare troppo non mi fa bene ahahahahahahha
>
>Marco


Di niente.
Cristian Barca

AntCiar Profilo | Expert

Ciao. Ho dimenticato una piccola cosa: nella form2 dove vai ad agire sulla variabile 'txb2' controlla prima se questa non è nulla. Questo perchè se apri la form con il costruttore normale e quindi non passi nessuna textBox, dove tenti di valorizzare la txb2 ti va in errore ('Riferimento non impostato su una istanza di oggetto')

quindi prima di qualsiasi operazione controlla questo:

if (txb2 != null)
{

txb2.Text = "......."

}

Ciao ciao
Cristian Barca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5