el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
13 juin 2005 à 14:59
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 2014
-
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...
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 14 juin 2005 à 13:32
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;
}
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 13 juin 2005 à 15:23
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....
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 13 juin 2005 à 15:38
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.
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 ?
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 14 juin 2005 à 14:48
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