PDA

View Full Version : [c#] Oggetti pubblici


Andrea993
24-08-2010, 22:56
Buonasera a tutti.
Sto programmando in C# ma mi è sorto un problema.
Da un form devo modificare la proprietà text di un textbox che si trova in un altro form.
Come posso fare?

dojolab
25-08-2010, 07:09
Buonasera a tutti.
Sto programmando in C# ma mi è sorto un problema.
Da un form devo modificare la proprietà text di un textbox che si trova in un altro form.
Come posso fare?

Prova:

NOMEFORM.TextBox.Text = "CIAO";

?

sneeze
25-08-2010, 07:51
ti conviene creare un metodo public nella form interessata dalla modifica della texbax
una cosa tipo

public void modificaTesto(string text)
{
//così puoi inserire una qualche validazione prima di effetture l'iserimento
miaTextBox.Text = text;
}

dopodichè quando crei il form da qualunque altra form

var form = new miaForm();
form.Show();
form.modificaTesto("la stringa da inserire");

dojolab
25-08-2010, 07:55
var form = new miaForm();
form.Show();
form.modificaTesto("la stringa da inserire");

var ?
Questa cosa non me la ricordavo :|


NomeForm oggetto = new NomeForm()
oggetto.Show();
oggetto.modificaTesto("BUBBA");


Seguendo il tuo esempio... :D

sneeze
25-08-2010, 08:05
puoi usare var grazie all'inferenza del tipo. prova pure se hai dubbi.

dojolab
25-08-2010, 08:24
puoi usare var grazie all'inferenza del tipo. prova pure se hai dubbi.

No no, non ho dubbi, ci mancherebbe, non l ho mai usato (e non uso C# da un bel po di tempo...); ma da sempre o dalla versione 3.0 del linguaggio?

sneeze
25-08-2010, 09:02
dal 3.0
in realtà non cambia nulla in quanto la variabile è cmq fortemente tipicizzata, solo che è il compilatore a determinarne il tipo.

dojolab
25-08-2010, 09:45
dal 3.0
in realtà non cambia nulla in quanto la variabile è cmq fortemente tipicizzata, solo che è il compilatore a determinarne il tipo.

Ah ecco spiegato il motivo: 3.0 :D

Andrea993
25-08-2010, 12:07
Grazie mille, la funzione pubblica so farla, chissà perchè non ci avevo pensato adesso provo e vi faccio sapere

EDIT: Ho provato a fare come ha detto sneeze, la cosa piu ovvia non funziona.
Il form da modificare è disattivato in secondo piano ma si vede anche se non si puo cliccarci sopra.
Quando faccio var form =new form1() lui mi crea un nuovo form identico a quello disabilitato ma questa volta lo modifica a dovere.
Io vorrei modificare quello in secondo piano, non crearne uno nuovo

astorcas
25-08-2010, 13:48
molto probabilmente apri il secondo form dal primo con uno showDialog.
Ti suggerisco di modificare il codice settando la proprietà Owner del secondo form con l'istanza del form che poi viene disabilitato prima della chiamata a showDialog (o quello che è). Non so se mi hai capito :asd:

Andrea993
25-08-2010, 13:52
Praticamente dici di spegner il primo form e subito dopo avviare quello modificato?

astorcas
25-08-2010, 13:56
mmm aspè scrivo un po di codice...

Supponiamo che il form chiamante sia di tipo Form1 e il "popup" di tipo Form 2 allora dicevo di fare una cosa tiop:

In Form1


Form2 newForm=new Form2();
newForm.Owner=this; //questa è la parte che dovresti aggiungere
newForm.Show();


invece in Form2, dove devi modificare il testo fai:


((Form1)Owner).ModificaTesto("TESTO");

Andrea993
25-08-2010, 23:43
Sei un genio...
Non sapevo esistesse form owner.

Saresti così gentile da spiegarmi esattamente a cosa serve Owner.
A vederlo sembra che il form diventa legato all'altro ma cosa fa esatamente?

sneeze
26-08-2010, 12:56
Esatto,
non devi aprire un altro form se già ce l'hai.
devi solo assicurarti di avere un riferimento a quel form nel form dal quale vuoi lanciare la modifica.

Tutto questo se hai intenzione di usare variabili o metodi pubblici.
Francamente forse ti consiglierei di guardare un pò delegati ed eventi.