Accéder à une textbox depuis une classe [Résolu]

el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 13 juin 2005 à 14:59 - Dernière réponse : sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention
- 14 juin 2005 à 15:22
Bonjour, bonjour,



est-ce que qqln pourrait m'expliquer comment on fait pour, depuis une
classe, rajouter du texte dans une textbox ? Je ne peux pas y accéder...
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 13 juin 2005 à 16:37
3
Merci
procède de cette manière, tout d'abord, crée une classe GPSEventArgs



public
class GPSEventArgs : EventArgs {



private
string message
=
string.Empty;



public
string Message {



get {
return message;}



set {message
=
value;}


}


}

Ensuite dans ta classe GPSQqch, déclare un nouveau délégé de cet façon :

public
delegate
void GPSEventHandler(
object sender, GPSEventArgs e);

puis déclare ton évènement :

public
event GPSEventHandler GPSAction;

Ensuite à chaque fois que tu as besoin de déclencher l'évènement procède ainsi :

if (GPSAction != null) {
GPSEventArgs args = new GPSEventArgs();
args.Message = "ton message";
GPSAction(this, args);
}

dans ton formulaire, il faut que tu t'abonnes à l'évènement et dans le paramètre e, tu auras une propriété e.Message avec ton message.

Sébastien FERRAND

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

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de sebmafate
Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 juin 2005 à 13:32
3
Merci
tu te mélanges les pinceaux

Donc, dans ta classe ConnexionBN, ajoute ces lignes la dans les déclaratons :

public delegate void GPSEventHandler(object
sender, GPSEventArgs e);
public event GPSEventHandler GPSAction;


et, toujours dans cette classe, à chaque fois que tu as besoin de déclencher l'évènement, ajoute le code suivant :
if (GPSAction != null) {
GPSEventArgs args = new GPSEventArgs();
args.Message = "ton message";
GPSAction(this, args);
}

Enfin, dans ton formulaire, après :
bnReader = new ConnexionBN (PortNameBN, BaudRateBN, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit) ;

ajoute :
bnReader.GPSAction += new GPSEventHandler(bnReader_Action);

puis crée une méthode :
private void bnReader(object sender, GPSEventArgs e) {
monTextBox.Text = e.Message;
}

J'espère que c'est clair cette fois-ci


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de sebmafate
Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 juin 2005 à 14:57
3
Merci
Oui, c'est bnReader_Action à la place de bnReader
et modifie ca :
bnReader.GPSAction += new BNEventHandler(bnReader_Action);

par bnReader.GPSAction += new ConnexionBN.BNEventHandler(bnReader_Action);

ca devrait être bon là ;)

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 13 juin 2005 à 15:06
0
Merci
2 questions à te poser à propos de ta classe :

- Est-ce un objet métier ?
- Est-elle appelée par ton formulaire ?

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Commenter la réponse de sebmafate
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 13 juin 2005 à 15:23
0
Merci
Je ne connais pas la définition d'un objet métier.



Cependant, je crée une instance de cette classe lorsque je clique sur un bouton de mon unique formulaire.

Comme tu me l'avais conseillé, je déclare cette instance comme suit :

static Form1 MaForm = new Form1();

static void Main()

{

Application.Run(MaForm);

}

par contre, lorsque l'appli ne tourne pas et que je suis en mode
éditeur de code, quand on fait CTRL+space apparait une liste des
méthodes, et propriétés disponibles pour l'objet après lequel tu te
trouves. Et bien, je ne trouve pas le nom de ma textbox a aucun
endroit. J'ai essayé form1.CTRL+space , maform.CTRL+space , plein de
choses mais non....



Est-ce que tu vois un peu mieux mon pb ?
Commenter la réponse de el_teedee
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 13 juin 2005 à 15:25
0
Merci
hmmm, j'ai dit une bétise.



Je déclare mon instance de ma classe Form1 comme ci dessus,

et je déclare mon instance de ma classe connexionBN, après le clique d'un bouton :



bnReader = new ConnexionBN (PortNameBN, BaudRateBN, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit) ;

et là en effet, je ne lui passe rien comme référence par rapport à "MaForm".
Commenter la réponse de el_teedee
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 13 juin 2005 à 15:38
0
Merci
ok... donc c'est un objet métier... l'une des premières règles de la programmation objet, c'est que les objets métier ne doivent jamais inter-agir avec l'IHM (Interface Homme-Machine, le formulaire quoi)

Donc le mieux, c'est de définir dans ta classe des évènements qui informeront ton formulaire que quelque chose s'est passé et ainsi afficher le message que tu veux dans ta form.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Commenter la réponse de sebmafate
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 13 juin 2005 à 16:19
0
Merci
ok, je vois, je pourrais déclarer un évènement "action" par exemple,
que j'active a chaque fois que je veux rajouter du text a la textbox, c
ca ?



l'évènement appartient à la classe connexionGPS, mais comment je
déclare tout ca ? je crois que pour l'activer il faut faire
this.invoke(l'évènement).
Commenter la réponse de el_teedee
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 14 juin 2005 à 12:24
0
Merci
Bon, ben, je pense que j'y suis presque, enfin plus ou moins...



Voilà ce que j'ai fait, mais il y a une erreur.





Dans
la classe où doit se passer l’évènement :







private void
AddTextToTextbox(object sender, EventArgs e)




{




BNEventArgs
args = new BNEventArgs();




args.Message
= "ton message";




OnAddingText(this, args);




}








public void OpenPortBN()




{




//Déclaration de lévènement




EventHandler BNAddTextHandler = new EventHandler (this.AddTextToTextbox);




//déclénchement de l'évènement :




this.Invoke (BNAddTextHandler);




...







public delegate void BNEventHandler(object
sender, BNEventArgs arg);








public event
BNEventHandler OnAddingText;








Dans la classe BNEventArgs :








using System;


namespace Essai4




{




public class
BNEventArgs : EventArgs




{




private string
message = string.Empty ;




public BNEventArgs()




{




}




public string Message




{




get




{




return message;




}






set




{




message=value;




}




}




}


}




Le problème quand je lance, lorsque je
clique sur mon bouton, il éxécute la fonction OpenPort(), qui déclenche
(je ne sais pas si j'utilise les bons termes, je t'avoue que j'ai passé
toute la matinée à essayer de comprendre comment les évènements
fonctionnent) l'évènement, puis il plante et donne l'erreur suivante :

Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.windows.forms.dll



Informations supplémentaires : Impossible d'appeler Invoke ou
InvokeAsync sur un contrôle tant que le handle de fenêtre n'a pas été
créé.



Donc voili voilou, tu connais cette erreur avec les évènements ?
Commenter la réponse de el_teedee
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 14 juin 2005 à 14:48
0
Merci
Ahhhhhh !



on touche au but.... Il y a une dernière erreur. En tout cas, merci
pour le temps que tu passes à m'expliquer, ton dernier post m'a
effectivement paru assez clair.



L'erreur : si je met, comme tu me l'a marqué ci dessus private void bnReader(object sender, BNEventArgs e) {...} alors il me marque :

La classe 'Essai4.Form1' contient déjà une définition de 'bnReader' ce qui est normal car bnReader est une instance de ma classe connexionBN


Par contre, si je remplace bnReader par bnReader_Action (vu qu'il veut pas bnReader, j'ai essayé bnReader_Action) il marque alors :

Le type ou le nom d'espace de noms 'BNEventHandler' est introuvable
(une directive using ou une référence d'assembly est-elle
manquante ?) à la ligne suivante :

bnReader.GPSAction += new BNEventHandler(bnReader_Action);



Alors, je sais plus, est-ce que l'erreur vient de bnReader (au cas où tu aurait fait un copier coller trop vite ) ou bien il y a encore un problème au niveau de BNEventHandler, qui est bien déclaré dans ma classe connexionBN, en tant que public delegate void BNEventHandler(object sender, BNEventArgs e);



PS : remplace les "GPS" par "BN" pour boite noire. Je ne travaille plus avec ma classe connexionGPS mais connexionBN exemple pour GPSEventArgs -> BNEventArgs
Commenter la réponse de el_teedee
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 14 juin 2005 à 15:21
0
Merci
Yaoooooooooooooooouuuuuuuuuuuuuuu !



Eh bah ! ca marche, j'ai "ton message" qui apparait dans ma textbox :)



Maintenant faut que je foute ça à ma sauce, merci bcp Seb.



Et surement a bientôt
Commenter la réponse de el_teedee
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 juin 2005 à 15:22
0
Merci
de rien... les forums sont fait pour ça


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Commenter la réponse de sebmafate

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.