Ref Champ dans Module

Résolu
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009 - 12 sept. 2007 à 23:18
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009 - 7 nov. 2007 à 10:07
Bonjour à tous et toute,

Je suis en plein développement d'un mini soft pour charger des données de fichier text dans une base SQL. Pour ce faire, l'utilisateur devra choisir la période pour laquelle il veut charger ses données. Les valeurs qui se trouvera dans la combo Periode sera renseigner par mon code à partir de nom de dossier présent dans un répertoire.

Mon soucis est que je ne peux pas faire référence du tout au Combo Box Periode qui ce trouve sur mon formulaire principal... Il me marque comme quoi la variable est non déclarer, comment dois-je faire pour qu'il soit visible dans mon module...

Merci pour toute aide que vous pouvez m'apporter...

Voici mon code du module :



Module

ChargerNN





   Function Fetch_Periode()





      'Variable pour manipuler fichier texte






      Dim TxtChemin AsString = IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location) & "\TEMP"





      Dim TxtRead As IO.StreamReader





      'Variable Chemin pour le chemin où ce trouve les répertoires et Dossier pour les répertoires qui






      'seront rajouté dans la combo box






      Dim Chemin, Dossier AsString





      'Def seras la valeur par défault du combo Periode






      Dim Def As Data





      'Aller chercher le chemin principal où ce trouve les sous dossiers dans le fichier texte





      TxtRead = New IO.StreamReader(TxtChemin & "Chemin.txt", System.Text.Encoding.Default)





      For x AsInteger = 1 To 2




         Chemin = TxtRead.ReadLine





      Next






      'Insérer les valeurs dans la combo Periode





      Dossier = Dir(Chemin, FileAttribute.Directory)





      While Dossier <> ""





         If IsNumeric(Dossier) And Len(Dossier) = 4 Then




            Periode.Items.Add("20" & Mid(Dossier, 3, 2) & Mid(Dossier, 1, 2))





         End
If






      End
While






      'Affecter la date MM/AAAA (M-1) à D





      Def = System.DateTime.Now.Month - 1 & "/" & System.DateTime.Now.Year





   End



Function





End



Module

24 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 sept. 2007 à 00:23
Salut,

Tout simplement

If IsNumeric(Dossier) And Len(Dossier) = 4 Then            FormulairePrincipal.Periode.Items.Add("20" & Mid(Dossier, 3, 2) & Mid(Dossier, 1, 2))

EndIf

Une autre méthode consiste à paramètrer ta fonction

Function Fetch_Periode(xCombo As ComboBox)
If IsNumeric(Dossier) And Len(Dossier) = 4 Then           xCombo.Items.Add("20" & Mid(Dossier, 3, 2) & Mid(Dossier, 1, 2))

EndIf

et lors de l' appel faire passer Priode à ta function  
(qui ressemble plutot une procedure puisqu' il n' y' a pas de valeur à retourner Mais bon!)

Call Fetch_Periode(FormulairePrincipal.Periode)

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 nov. 2007 à 09:56
Bonjour

Comme dit quleques messages avant :
MdlCommun étant un module comportant un attribut public "MyFrmMain" de type FrmMain.

donc

Module MdlCommun
    public MyFrmMain as FrmMain=Nothing
End Module

Ici le =nothing sert à initialiser la valeur, il est optionnel.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
3
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
13 sept. 2007 à 09:47
Merci beaucoup pour ton aide. J'ai tenté en premier lieu de faire Main.Periode.Items.Add(...), Main étant le nom de mon formulaire principal et il me donnait le message suivant : "Une référence à un membre non partagé requiert une référence d'objet."

Par contre, j'ai fait ta deuxième solution en incluant ma combo periode dans la Function et elle fonctionne à merveille.
Function Fetch_Periode(ByVal Periode As ComboBox)

J'aimerais quand même comprendre pourquoi le premier option ne fonctionne pas, y-a-t'il une propriété à changer sur le champ ? ou une déclaration suplémentaire ?

Merci
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 sept. 2007 à 13:13
Bonjour,
dsl et au risque de te decevoir, j' avoue n' avoir jamais eu la malchance de
tomber sur cette erreur !
En même temps c' est pas étonnant puisque je suis en VB6 ,et c' est à tout
hasard que j' ai répondu à ta première question.
Pour le reste, tu peux faire ce que j' ai déjà fait: En recherchant dans google
"Une référence à un membre non partagé requiert une référence d'objet",
j' ai eu pleins de liens que j' ai consulté sans rien trop comprendre.
Peut être que toi tu pourras en tirer quelque chose ...


Bonne continuation.











<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 sept. 2007 à 08:43
Bonjour

D'où l'utilité de préfixé les objets, ton formulaire Main FrmMain, tu n'aurais pas eu de pb.

Le problème s'explique simplement, tu es dans un module, tu lui demande d'acccéder à un objet qu'il ne connais pas, tu doit lui dire à quelle form il appartient, car si tu as 2 formulaire (frm1 et Frm2 par ex) et sur les 2 un bouton nommé CmdButton, comment peut-il savoir lequel prendre ?

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 sept. 2007 à 21:21
Bonsoir ,

beh c' est ce qu' il a fait je crois !
Main.Periode.Items.Add(...), Main étant le nom de mon formulaire principal

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 sept. 2007 à 08:35
Bonjour

Je parlais de préfixé, les noms commencent par :
- Frm : Formulaire
- Mdl : Module
- Ctl : Controle perso
...

Et la plus de confusion.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
18 sept. 2007 à 21:32
Bonsoir,

J'ai tenter avec le frm devant le nom de mon formulaire mais ca me dit "Le nom 'FrmMain' n'est pas déclaré."...

Merci quand même
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
18 sept. 2007 à 21:56
Re-Bonsoir,

Par contre, ceci devient ennuyant, j'ai découvert que dans ma class principal, c'est à dire Main.vb, celui rattacher à mon formulaire, je peux appeller des Functions qui sont dans mon Module, par contre, je ne peux pas appeller des Function ou Public Sub situer dans mon code principal (Main) à partir de mon Module...

Je crois que mon problème ci-haut et celui-ci sont relier...

Quelqu'un saurait comment je dois procéder pour pourvoir appeller des functions et champ situer dans le code principal ?

Merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
19 sept. 2007 à 08:14
Bonjour

Ton formulaire, au lieu de l'appeler Main, appelle le FrmMain, c'est le nom de ton formulaire qu'il faut utiliser.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
3 oct. 2007 à 09:23
Bonjour,

Désoler d'avoir pris du temps à revenir mais j'ai dû mettre ce projet en attente.

J'ai essayer FrmMain.Periode.ItemsAdd et ca ne fonctionne toujours pas. Quand tu dis "Ton formulaire, au lieu de l'appeler Main, appelle le FrmMain" tu parles de quand je fais référence au formulaire dans mon code ou c'est mon code qui doit s'appeller comme ça (car dans les tabs en haut, j'ai Main.vb, Main.vb [Design] et ChargerNN.vb) ?

Merci

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 oct. 2007 à 09:38
Bonjour

Quand tu clique sur le fichier correspondate à ton formulaire dans
l'explorateur de projet (la fenêtre à droite), tu vas dans les
propriétés, tu change le nom Main.vb en FrmMain.vb, puis tu clique sur "Oui" à la question qui suit.

Quand tu clique sur le fichier correspondate à ton module dans
l'explorateur de projet (la fenêtre à droite), tu vas dans les
propriétés, tu change le nom Main.vb en MdlMain.vb, puis tu clique sur "Oui" à la question qui suit.

Ensuite les occurences à ta form s'appelleront FrmMain et plus Main (et mme principe pour le module).

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
3 oct. 2007 à 11:01
J'ai fait la tentative, renommer Main en FrmMain et ChargerNN en MdlChargerNN. Dans mon code de MdlChargerNN, j'ai mis FrmMain.Periode.ItemsAdd mais FrmMain est souligné bleu et j'ai toujours le messsage popup "Le nom 'FrmMain' n'est pas déclarer"...

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 oct. 2007 à 11:15
Bonjour

J'ai pas l'EDI, de mémoire, quand tu clique sur la form de ton formulaire, ses props s'affichent dans la fenêtre dédiée à cette tâche.
La propriété Name (je ne sais plus si c'est "(Name)" ou non) te met "Main", là tu la change en "FrmMain".

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
3 oct. 2007 à 12:09
Bonjour,

Quand je choissis le tab "FrmMain.vb [Design]" et que je clique sur le formulaire, dans les propriétés, sous Design j'ai "(Name)". J'ai changer celui-ci en imaginant que c'est ce que tu parlais de. Maintenant, il me souligne en bleu FrmMain.Periode (contrairement à juste FrmMain) et me met le message "Une référence à un membre non partagé requiert une référence d'objet."...

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 oct. 2007 à 12:19
Bonjour

Oui, car là tu fais référence à la classe, l'expression complète (et propre) (toujours sans EDI) :
My.Forms.FrmMain
(Il se pourrait qu'il y a un viveau de plus, mais je n'en suis pas sûr).

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
6 nov. 2007 à 17:20
Bonjour,

Je reviens sur mon problème qui persiste toujours mais avec de nouveau détail :

1° Je suis sous VB.NET 2003 donc 7.1 avec FrameWork 1.1;

2° J'ai fait le test chez un ami qui à VB.NET 2005 donc 8.0 avec FrameWork 2.0 et ca fonctionne, apparament, quand l'on met un champ en public, ca rajoute Shared derrière Public (ex : Public Shared WithEvents Periode As System.Windows.Forms.ComboBox) ce que ma version ne fait pas... Donc je le fait en dur, je rajoute Shared mais ca fait disparaître ma comboBox de mon formulaire...

Donc comment faire?

Merci

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
6 nov. 2007 à 17:23
J'ai oublié de préciser que c'est dans les paramètre #Region dans le code que ca rajoute Shared.

Merci

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 nov. 2007 à 08:28
Bonjour

Ah donc tu es en 1.1, j'ai cru que tu étais en .NET2.

Dans ce cas ça explique pas mal de chose :
- pour pouvoir utiliser ta ComboBox, tu vire le shared, mais dans le Load de ta form (qui contient le Combo) tu fais :
 MdlCommun.MyFrmMain=me
 MdlCommun étant un module comportant un attribut public "MyFrmMain" de type FrmMain.
 Ensuite, pour accéder à ton Combo : MdlCommun.MyFrmMain.Combo

Car le mot clé My n'existe que depuis .NET2

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Gunshin82 Messages postés 37 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 10 décembre 2009
7 nov. 2007 à 09:05
Bonjour,

Bon, je crois que l'on peut dire que j'ai dépassé le status de chiant mais bon... désoler mais j'ai toujours des problèmes.

Dans mon code principal, sous le Private Sub FrmMain_Load(...) j'ai entrer MdlCommun.MyFrmMain = Me et ca me retourne comme quoi MdlCommun n'est pas déclarer.

Dois-je ajouté une référence ou importer un namespace..?

Merci

Most people would die sooner than think; in fact, they do.
-Bertrand Russell-
0
Rejoignez-nous