Variable entre deux form [Résolu]

Signaler
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
Bonjour a tous,

Je travaille sur un outil permettant de configurer des commutateurs.
J'ai un petit soucis.
Voila dans un premier temps une partie de mon interface principale (form1)



J'aimerai que chacun de ces boutons pointent sur une seule et unique autre form (form2).
Comme la config principale de chacun de ces boutons est la même j'ai pas envie de faire 48 fois la même forme.
Voici la form2.




Et cette forme deux envoi les commandes au commutateur pour chaque port. Le soucis est qu'a chaque fois que je clique sur Port1 ou Port2 ou Port3, il faudrait que je récupère dans ma deuxième forme la variable 1, 2 ou 3... afin d'envoyer les commandes sur le bons port.

Je ne sais pas si je suis clair.

Merci de votre aide

10 réponses

Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
Bonjour,

Il y a sur le forum une discussion interressante lancée par Reinfield (mais c'est un pléonasme), si je ne me trompe pas, sur le sujet qui te concerne mais... je n'arrive pas à mettre la main dessus...

Sinon la solution que j'utilise habituellement c'est l'ajout de propriétés aux feuille qui doivent êtres appelées. Ce principe est illustré ici par exemple --> PASSER UN (OU PLUS) PARAMETRE(S) À UNE FORM.

Tu peux l'utiliser tel quel si tu veux mais comme tu connais le type de ta données (à priori au moins Byte) et que dans l'exemple la propriété ajouté est un Variant, il serait mieux que tu adapte ce code pour maipuler ton type de donnée.

A+
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
Salut,

Désolé, je vais changer de direction mais pour une bonne raison. Plutôt que d'utiliser des tableaux dynamiques, dans ton cas, je vais te proposer les collections.

Pour les tableaux dynamiques, ça aurait été formateur de voir comment mettre en place une gestion des éléments avec ajout et suppression, cependant ce serait illogique dans ton cas de les utiliser car, justement, ça reviendrait à faire le travail que les collections font déjà pour nous

La Collection est une classe, il faut donc créer une instance avant de l'utiliser.

Dans un module tu déclare et instancie ta collection comme ceci

Public vLans As New Collection


Et ensuite, n'importe où (dans n'importe quelle feuille ou module de ton projet) car ton instance de class est publique,

pour ajouter un élément :
Call vLans.Add(100) ' 100 est la valeur à ajouter


pour supprimer :
Call vLans.Remove(1) ' 1 est l'index de la valeur à supprimer


pour lire un élément:
vLans.Item(1) ' 1 est l'index de la valeur à lire


pour connaitre le nombre d'éléments :
vLans.Count



PS: Les indexes commencent à 1 et si vLans.Count = 0 c'est qu'il n'y à pas d'éléments dans la liste (mouais... c'était évident...)

En fait tu utilise déjà les collections puisque tu utilise des controles comboBox ou ListBox

Après ça, il ne te restera pas beaucoup de chemin pour ajouter éventuellement la sauvegarde comme je te l'avait proposé plus haut.

Courage,
A+
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
C'est parfait ça marche impeccable, merci beaucoup. J'aimerai aussi faire un truc dans le genre plus difficile.

J'ai une forme qui ajoute des vlans. A chaque fois on rentre un numéro (ex:100) puis on clique sur ajouter.On peut encore en ajouter un autre, mettons 200 cette fois ci.

Il faudrait que je retienne les deux numeros 100 et 200, pour que lorsque je clique sur une autre forme qui est SupprimerVlan, je vois mes deux vlans 100 et 200 dans un combo.

Saurais tu faire ça ?

Merci
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
Du moment qu'il est nécessaire de mémoriser des valeurs à utiliser dans plusieurs forms, il faut penser, logiquement, à une solution exterieur à ces forms.

Solution directe, un tableau dynamique et publique dans un module. Dans ce cas, les valeurs seront disponibles le temps de l'execution du programme.

S'il est souhaitable de pouvoir retrouver ces valeurs une fois le programme fermé et ré-ouvert (après un plantage par exemple! du programme ou de windows. Dans ton cas ça pourrai être utile peut être...) une solution du genre de celle-ci, Charger un ComboBox ou une ListBox à partir d'un fichier (et vice versa), pourrait être pratique.

* A chaque ajout, sauvegarder la liste complète
* Chaque fois qu'on veux supprimer, récupérer la liste.
* A l'ouverture du programme, récupérer la liste et s'il y a des valeurs:
- soit ne rien faire et si on va dans supprimer on récupère la liste comme si de rien n'était
- soit on prévient l'utilisateur que des vlans ont été ajouté lors d'une précédente session et lui demande quoi faire.
* A la fermeture du programme, récupérer la liste et s'il y à lieu, prévenir que des vlans ont été ajoutés et qu'ils n'ont pas été supprimés.

A+
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
J'aimerai dans un premier temps faire ceci :

Solution directe, un tableau dynamique et publique dans un module. Dans ce cas, les valeurs seront disponibles le temps de l'execution du programme. 


Aurais tu un exemple de module a réaliser pour que ca fonctionne, parce que la comme ca je ne vois pas comment faire, je suis debutant
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
Ha ben oui, vraiment très débutant alors

Bon ben, va falloir que tu remonte les manches alors. Voilà un début, un tutoriel sur les tableaux dynamiques sur ce site, écrit par Xentor --> TOUT SUR LES TABLEAUX DYNAMIQUES

Faut bien commencer...

Mais pense à faire tes propres recherches aussi. Si on à inventé des moteurs de recherches c'est bien pour ça.

Bonne lecture
A+
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Merci de ton aide mais je ne vois pas comment envoyer les variables d'une forme dans un tableau dynamique dans un module, pour récupérer depuis une autre forme les valeurs de ce tableau dans le module.
Je galère depuis quelques temps et je n'y arrive toujours pas.
Peut tu me montrer un code qui me permet de faire un truc dans le genre stp ?
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Je te remercie beaucoup, je touche "presque au but".
Le seul soucis est que je n'arrive pas à mettre plusieurs Vlans dans la collection. Surement parce que mon code n'est pas bon.
Je te met le code de ma fenêtre, en gros, à chaque clique "Ajouter", cela ajoute un Vlan tout simplement.


Private Sub Form_Load()
    Me.Left = (Screen.Width - Me.Width) \ 2
    Me.Top = (Screen.Height - Me.Height) \ 2
End Sub

Public Sub Ajouter_Click()
Call Vlan
End Sub


Private Sub Terminer_Click()
'Fermeture de la fenetre
AjouterVlan.Hide
End Sub


Private Function Vlan()
'Ajout d'un Vlan
If VlanName.Text = "" Then
ConfCisco48.MSComm1.Output = "end" & vbCr & "configure terminal" & vbCr & "vlan " & VlanADD.Text & vbCr & "end" & vbCr
Else
ConfCisco48.MSComm1.Output = "end" & vbCr & "configure terminal" & vbCr & "vlan " & VlanADD.Text & vbCr & "name " & VlanName.Text & vbCr & "end" & vbCr
End If
Call vLans.Add(VlanADD.Text)
'Remise a zero des champs
VlanADD = ""
VlanName = ""
End Function
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Désolé j'ai en fait réussi. J'aurai du essayer autre chose avant de poster, voici la modif effectué et ça fonctionne encore merci.


Private Sub Form_Load()
    Me.Left = (Screen.Width - Me.Width) \ 2
    Me.Top = (Screen.Height - Me.Height) \ 2
End Sub

Public Sub Ajouter_Click()
Call Vlan
Call vLans.Add(VlanADD.Text)
'Remise a zero des champs
VlanADD = ""
VlanName = ""
End Sub


Private Sub Terminer_Click()
'Fermeture de la fenetre
AjouterVlan.Hide
End Sub


Private Function Vlan()
'Ajout d'un Vlan
If VlanName.Text = "" Then
ConfCisco48.MSComm1.Output = "end" & vbCr & "configure terminal" & vbCr & "vlan " & VlanADD.Text & vbCr & "end" & vbCr
Else
ConfCisco48.MSComm1.Output = "end" & vbCr & "configure terminal" & vbCr & "vlan " & VlanADD.Text & vbCr & "name " & VlanName.Text & vbCr & "end" & vbCr
End If
End Function
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Salut,

J'ai un autre petit soucis.

Quand j'ajoute mes Vlans tout se passe bien, je ferme la fenêtre Vlans (sans quitter mon programme) je fais autre chose, et lorsque je reviens dans ajouter pour en remettre un autre, il ne s'ajoute pas à la liste, j'ai l'impression qu'on ne peut la modifier qu'une seule fois.


Comment faire ?