el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
6 juin 2005 à 15:48
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 2014
-
7 juin 2005 à 11:59
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. :-(
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 6 juin 2005 à 16:19
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;
}
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 6 juin 2005 à 16:26
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 ?)
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 7 juin 2005 à 09:20
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 ?
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 7 juin 2005 à 11:35
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
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 7 juin 2005 à 11:52
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.