C'est ce que je ferai... dès que je pourrai modifier mes textbox depuis le fichier de classeEnvoyé par mr.net
![]()
C'est ce que je ferai... dès que je pourrai modifier mes textbox depuis le fichier de classeEnvoyé par mr.net
![]()
Qu'est-ce que ça veut dire ?je n'arrive pas à étendre sa portée à la classe
Envoie la structure globale de tes classes, pour voir...
C'est à dire que je ne le "vois" pas dans la classe, alors que je le "vois" dans le code du formulaire principal.
Pas de problème pour envoyer la structure... mais je fais comment ?
(Visual Studio 2003 si c'est spécifique)
Au cas où ça ne se verrait pas... je fais du C# depuis 3 semaines...
... hummm... je voisC'est à dire que je ne le "vois" pas dans la classe, alors que je le "vois" dans le code du formulaire principal.
ou pas
Quand tu dis "la classe", c'est ta classe de calcul ? donc tu "vois" le texte des TextBox de ton formulaire secondaire de puis le formulaire principal mais pas depuis la classe clsAffaire ?
Dans ton formulaire principal tu fais "formAffaire.textBox1.Text = valeur1;" et ça marche ? les TextBox ne sont donc pas private ? (c'est possible mais ce n'est pas ce qui est proposé dans la génération automatique de code par VisualStudio !)
Bah tu copies-colles ton code en ne gardant que les trucs utilesPas de problème pour envoyer la structure... mais je fais comment ?
J'ai pensé à quelque chose qui te pose peut-être problème, ou peut-être pas, je ne sais pas :
En fait, quand tu appelles ta fonction de la classe clsAffaire, tu "perds" ta variable formAffaire donc tu ne sais plus comment faire référence à ton formulaire ?
Dans ce cas, deux possiblités :
- si clsAffaire est une classe qui s'instancie et qui ne "correspond" qu'à un formulaire : lier une instance de clsAffaire à une instance de frmAffaire, à l'aide d'un champ privé qui est initialisé dans un constructeur qui prendra formAffaire en argument
- sinon, méthode générale qui marchera tout le temps : passer formAffaire en argument dans ta fonction de "récupération des données et remplissage du formulaire"
(je sens que je ne suis pas claire...)
Salut,
je pense qu'il faut que tu passe une instance de ton formulaire à la classe clsAffaireje n'arrive pas à atteindre le formulaire ouvert. Il est là... mais je ne sais pas où il est caché.
et il doit quand même falloir faire des propriétés publiques pour les champs formAffaire.textBoxX.Text
parce que les textBox doivent être private
Oui !Envoyé par Astartee
C'est possible parce que j'ai modifié les private en public.
OK. C'est en fichier joint. J'espère ne pas avoir trop résumé...Bah tu copies-colles ton code en ne gardant que les trucs utiles![]()
Tu l'es sûrement... mais pas à mon petit niveau...(je sens que je ne suis pas claire...)![]()
Non, pour être tranquille, j'ai passé le TextBox entier en public...Envoyé par melleb
C'est un peu trop bourrin ?
Je me répète, mais je pense bien qu'il faille que tu passes une instance de frmAffaire à ta clsAffaire...
sinon, je ne vois pas comment clsAffaire peut voir l'instance de ta frmAffaire...
je mettrai :
et dans ta frmAffaire,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void AppelBase(string v_naff, string v_ctyp_aff, frmAffaire form) { // là, tu vas pouvoir modifier les attributs de ta formAffaire form.TextBox1.Text = "trucmuche"; }
car c'est dedans je suppose que tu appelles AppelBase(), tu vas faire :
moi, c'est comme ça que je vois les choses...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // c'est la méthode de ton bouton 'AppelBase' public buttonAppelBase_Click(object o, sender s) { //... clsAffaire.AppelBase(v_naff, v_ctyp_aff, this); }
mais peut être que je suis complètement à coté de la plaque (comme j'ai pas pris la discussion dès le début...)
... donc dans clsAffaire, à aucun endroit il n'y a de référence à une quelconque frmAffaire ?
Je pense que ça correspond à ce que je proposais dans mon dernier message :
1/ tu peux lier une instance de clsAffaire à ton formulaire formAffaire
2/ tu peux indiquer en argument de ta fonction le formulaire que tu veux mettre à jour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class clsAffaire { private frmAffaire formAffaire; public clsAffaire(frmAffaire formAffaire) { this.formAffaire = formAffaire; } public void AppelBase(string v_naff, string v_ctyp_aff) { // requête dans la base ... // et la modification des textbox formAffaire.txtbox = ... ; } } // et au moment où tu définis ton instance de clsAffaire : clsAffaire maClasseAffaire = new clsAffaire(formAffaire); // si c'est dans le frmPrincipal clsAffaire maClasseAffaire = new clsAffaire(this); // si c'est dans frmAffaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class clsAffaire { public void AppelBase(string v_naff, string v_ctyp_aff, frmAffaire formAffaire) { // requête dans la base ... // et la modification des textbox formAffaire.txtbox = ... ; } } // et au moment où tu appelles la fonction AppelBase : maClasseAffaire.AppelBase(vNaff, vCtypAff, formAffaire); // si c'est dans le frmPrincipal maClasseAffaire.AppelBase(vNaff, vCtypAff, this); // si c'est dans frmAffaire
Et en effet il vaut mieux laisser les TextBox privés et utiliser des propriétés pour y accéder :
- parce que une partie du code est sans doute générée par ton framework, que c'est cette partie qui délare les TextBox en private, et que le code généré il ne vaut mieux pas y toucher
- parce que c'est l'esprit C# : les propriétés ont été spécialement intégrées dans la syntaxe de ce langage pour gérer les accès aux variables, ce n'est pas pour ne pas les utiliser![]()
MMmh, si...Envoyé par Astartee
Mais comme ça ne fonctionne pas encore, le code n'est pas écrit.
Je compte l'utiliser dans le public void AppelBase(){}
Enfin... je vais regarder ce qur vous m'avez proposé bien tranquillement, et je reviens vous dire ce qu'il en est (peut-être demain).
Je repasse aussi mes textbox en private et je regarde les propriétés dont tu parles.
En tout cas : merci à tous !
EDIT :
en fait, ça a été plus vite que je croyais : ça marche tout seul !
Sinon, pour info : pour ce qui est d'utiliser les propriétés, j'ai passé le champ "Modifiers" de private à public... et ça a modifié le code du concepteur directement.
Donc en fait, c'est pareil que ce que j'avais fait(pour une fois que je ne fais pas une bêtise !)
Merci encore !
Bah évidemment que ça marcheça a été plus vite que je croyais : ça marche tout seul !
je rigoooole
Tant de messages pour un si petit problèmeLe plus dur aura été de comprendre ce qui n'allait pas... Il est vrai que parfois je suis dure d'oreille mais là je crois que tu n'as pas très bien présenté les choses non plus ! :p
Morale de l'histoire :
si tu veux, depuis une classe (ici clsAffaire), faire référence à une instance d'une autre classe (ici l'instance formAffaire de la classe frmAffaire), il faut à un moment ou à un autre donner cette instance à la première classe : en propriété, en paramètre d'un constructeur, en paramètre d'une méthode... peu importe mais autrement la première classe ne poura pas deviner toute seule quel est l'objet à utiliser !
Partager