Accéder à une textbox depuis une classe

Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
-
Bonjour, j'ai trouvé qql exemples qui disent comment écrire dans une
textbox d'une form1 depuis une form2, mais moi, je n'ai qu'une form1 et
au cours des procédures d'une de mes classes, je voudrais ecrire dans
ma form1.textbox1.



J'ai pensé à créer la méthode suivante :

public void Changer_Textbox (System.Windows.Forms.TextBox le_nom, string le_texte)

{

le_nom.Text += le_texte;

}


et dans la classe je pensais appeler :

Changer_Textbox ("textbox1","mon texte");

Mais il ne trouve pas la méthode changer_textbox de la classe form1. :-(



Une idée ?

10 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
c'est normal... ce n'est pas du VB, il faut instancier ta classe avant de pouvoir l'utiliser.

form1 f = new form1();

f.Changer_Textbox(...)

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
7
Je comprends ce que tu veux dire, mais je ne vois pas où mettre ce code ?



Où est-ce que je lui passe la référence à toute la forme 1?

Attention, je ne veux pas qu'il me lance une nouvelle form1 a cause de la ligne "form1 f= new form1();"



(quand j'y pense, y'a bien des années que j'ai pas fait de C, lol)
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
7
Hmmm, si l'instanciation dont tu parles doit se faire dans le code de
la classe form1, et bien, moi je n'ai que ca en guise d'instanciation :



static void Main()

{

Application.Run(new Form1());

}





Est-ce que ca suffit ou pas ?
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
si tu utilises ShowDialog() pour ouvrir le form2, voici, une solution pour toi :

((form1)this.Owner).Change_Textbox(...);

mais je trouve que modifier le texte de form1 à partir de form2 n'est pas une bonne solution, voici comment je pratique :

dans form2, crée une propriété qui correspond au texte qui doit être mis dans le textbox du form1.
par : public string monText {get{return txtBox1.Text;}}

et fait ceci dans form1 pour ouvrir ta form2:

using(form2 f = new form2()) {
f.ShowDialog();
this.textBox1.Text += f.monText;
}

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
7
Hmmm, je t'arrete tout de suite, ma classe d'où je veux accéder à ma
textbox (appartenant à ma classe form1) n'est pas une classe forme.



Donc je n'utilise pas de .showdialog, mais ceci :



gpsReader = new ConnexionGPS(PortNameGPS, BaudRateGPS, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit) ;

ma deuxième classe s'appelant "ConnexionGPS", dont je crée un objet "gpsReader"



La création de ma form1 se fait par le code par défaut cad :

static void Main()

{

Application.Run(new Form1());

}



C'est donc quand je suis à l'intérieur d'une méthode de la classe
ConnexionGPS, que je veux y indiquer dans ma textbox de la form1 où je
suis. (en fait je veux faire une sorte de débuggeur, pour écrire ce que
l'appli fait au fur et a mesure, même chose que
console.writeline, tu vois le genre ?)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
le problème avec ton code, c'est que tu n'as aucune référence pour accéder à ton objet form1. C'est pas très pratique.

fait plutot :
Form1 static maForm = new Form1();
static void Main() {
Application.Run(maForm);
}

avec ca, tu auras toujours une référence vers ton formulaire.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
7
Bon ben je lutte qd même pas mal... fait chier....

voilà ce que j'ai écrit dans la classe Form1 :



static Form1 MaForm = new Form1();



static void Main()

{

Application.Run(MaForm);

}

Je lance donc une
instance d'une Form1 nommée "MaForm". Le problème, c'est comment
j'accède à elle depuis ma classe ConnexionGPS ? J'ai essayé de mettre :

changer_textbox (textbox1,"mon texte"); ne marche pas (ne connait ni la méthode, ni la textbox)

MaForm.changer_textbox (textbox1,"mon texte"); ne marche pas

J'ai essayé de rajouter using Form1; dans l'entete de la classe ConnexionGPS car il marquait pour les 2 lignes précédentes :

Le type ou le nom d'espace de noms 'MaForm'
est introuvable (une directive using ou une référence d'assembly
est-elle manquante ?)





Bon, pour finir, je balance le code en question :

namespace PC_COM_1

{

...tout le code par défaut



static Form1 MaForm = new Form1();



static void Main()

{

Application.Run(MaForm);

}



public void Changer_Textbox(System.Windows.Forms.TextBox le_nom, string le_texte)

{

le_nom.Text += le_texte;

}



//Création de mon objet ConnexionGPS lors du clique sur un bouton:

gpsReader = new ConnexionGPS(MaForm, PortNameGPS, BaudRateGPS, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit) ;

//Je lui passe en parametre l'objet MaForm, qui vient d'être crée

}





Ma classe ConnexionGPS :



namespace PC_COM_1

{

//le constructeur :



public ConnexionGPS(Form1 LaForme, string portname, int baudrate, ParitySetting parite, byte bytesize, StopBitsSetting stopbits)

: this(portname, baudrate)

{

LaForme.Changer_Textbox(LaForme.textBox_Entrant, "Le texte");

Parite = parite ;

ByteSize = bytesize ;

StopBits = stopbits ;

}

//Là, ça marche, plus d'erreur. Mais le problème,
c'est qu'il veut la référence à la Form1 dans toutes les méthodes qui
veulent accéder à cette textbox. Moi je ne veux pas dans chaque méthode
lui faire un passage de paramètre comme ci dessus. Je pensais que le
faire juste dans le constructeur suffisait. PS : je dispose de 4
constructeurs de ConnexionGPS différents, pour info)

Comment est-ce que l'on fait pour pouvoir accéder à cette textbox une fois pour toute ?



Des idées ? :)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
pour pouvoir accéder à ta form depuis une autre classe... il faut qu'elle soit déclarer public... pareil pour le textbox1.

maintenant, d'après moi... ce n'est pas la bonne solution. Maintenant que je vois un peu mieux ou tu veux en venir.

en fait, il faut que tu déclares un event dans ta classe ConnexionGPS, est que tu t'y abonnes dans ta form. Ainsi, à la réception de l'évènement tu pourras modifier le texte de ton textbox1.

Ne jamais oublier que l'un des principes de la programmation objet est qu'un objet métier ne doit JAMAIS modifier un objet de l'interface... --> architecture 3tiers

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
7
Bon, en fait, je vais passer tout simplement par

console.writeline

ca revient exactement à ce que je voulais faire, surtout que ce que je
voulais faire ne sera plus présent dans l'appli finale, donc...



Par contre, tu as raison faut que j'aille jeter un oeil sur comment on
gère les event, car, comme tu t'en doutes, je reprend un code qui a été
fait par une autre personne, et ca plante au moment d'un invoke sur un
event.



A suivre...



merci Seb
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
mais de rien... les forums sont fait pour ca...

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>