Groupes de controles en vb.net

Signaler
Messages postés
132
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
17 octobre 2008
-
Messages postés
17
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
7 mai 2009
-
Salut à tous,
 ça m'emmerde vraiment qu'il manque les groupes de contrôles en .net, est-ce que qqun a une soluce pour éviter des codes dans ce genre :

   MerKi

Private
Sub btnCopie1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie1.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A1.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B1.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C1.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D1.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E1.Text)

End
Sub

Private
Sub btnCopie2_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie2.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A2.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B2.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C2.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D2.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E2.Text)

End
Sub

Private
Sub btnCopie3_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie3.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A3.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B3.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C3.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D3.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E3.Text)

End
Sub

Private
Sub btnCopie4_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie4.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A4.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B4.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C4.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D4.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E4.Text)

End
Sub

Private
Sub btnCopie5_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie5.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A5.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B5.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C5.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D5.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E5.Text)

End
Sub

Private
Sub btnCopie6_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles btnCopie6.Click

   If TabControl1.SelectedIndex = 0
Then Clipboard.SetDataObject(A6.Text)

   If TabControl1.SelectedIndex = 1
Then Clipboard.SetDataObject(B6.Text)

   If TabControl1.SelectedIndex = 2
Then Clipboard.SetDataObject(C6.Text)

   If TabControl1.SelectedIndex = 3
Then Clipboard.SetDataObject(D6.Text)

   If TabControl1.SelectedIndex = 4
Then Clipboard.SetDataObject(E6.Text)

End
Sub

[size=1]La dictature c'est ferme ta gueule, la démocratie c'est cause toujours... (Woody Allen)/size=1

10 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Salut !
J'ai eu le meme problème pendant longtemps
Vas dans ta toolbox, clic-droit, chose items
La tu va trouver par exemple ButtonArray, ou CheckBoxArray, qui feront ton bonheur je pense... Ils auraient bien fait de faire un truc pour qu'on les trouve plus facilement qd meme...

Julien.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Tu peux toujours faire des collections.

Les groupes de controles existent toujours en .net, sauf qu'ils ne sont plus automatiques comme en vb6, il faut se les faire à la main avec des collections.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
132
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
17 octobre 2008

merci,


je vais essayer l'histoire des ARRAY et on va voir ce que ça donne
sinon on essaiera les collections
j'espère que ça va pas être trop prise de choux   
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Heu je suis en train de me rendre compte que je me suis sans doute un peu avancé... A mon avis, je cherchais un solution à ce problème, j'ai cru l'avoir trouvé (ben oui avec un nom pareil ButtonArray) et puis en fait je suis arrivé à rien et j'ai laissé tombé...
Commence plutot par les collection, ca me semble plus facile et plus utilisé.

Moi j'utiliserais soit une List (of Button) soit Button.ControlCollection mais à mon avis c'est fort semblable, à toi de voir...

Là je vais aller dormir, mais demain si tu veux je te fais un code pour gérer les évènements...

Julien.
Messages postés
132
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
17 octobre 2008

non te fatigue pas je vais bien trouver qquechose, je faisais du vb6.0 depuis 3-4 ans et là je me mets au .net et n'étant pas développeur pro, je tatonne, comme pas mal de monde ici,
j'ai trouvé une page pas mal sur le sujet (mais y'a de quoi lire)

http://www.microsoft.com/france/msdn/vbasic/articles/20030811-reflex-vb6.mspx

merci @+
Messages postés
17
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
7 mai 2009

Bonjour,

J'aimerais utiliser des ButtonArray et CheckBoxArray dans mon application mais je bloque un peu.
Comme décrit plus haut, après avoir ajouté la Bibliothèque Microsoft.VisualBasic.Compatibility dans les références et en faisant un clic droit dans la boîte à outils, j'ai obtenu les fonctions ButtonArray et CheckBox Array.
J'ai un exemple dans lequel il y a un paramêtre "index" dans la rubrique Divers des propriétés des Boutons mais je ne retrouve pas cette propriété dans mon projets.

Pourriez vous m'aider ???

Merci d'avance.

Passion:
Projet d'automatisation d'une maquette ferroviaire à l'aide d'une carte d'interface Velleman K8000.
Messages postés
132
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
17 octobre 2008

Salut,

j'ai pas compris ta question à 100% pourtant elle parait claire mais je suis un peu fatigué ce soir , tout ce que je peux te dire c'est que les lignes de codes que j'avais mis tout en haut, sont aujourd'hui remplacées par

    Private Sub btnCopie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopie0.Click, btnCopie1.Click, btnCopie2.Click, btnCopie3.Click, btnCopie4.Click, btnCopie5.Click

        Dim ctlSender As Control
        Dim IndexBouton As Integer

        ctlSender = CType(sender, Control)

        IndexBouton = CInt(Mid(ctlSender.Name, 9, 1))

        If TabControl1.SelectedIndex = 0 Then Clipboard.SetDataObject(Panel1.Controls(IndexBouton).Text)
        If TabControl1.SelectedIndex = 1 Then Clipboard.SetDataObject(Panel2.Controls(IndexBouton).Text)
        If TabControl1.SelectedIndex = 2 Then Clipboard.SetDataObject(Panel3.Controls(IndexBouton).Text)
        If TabControl1.SelectedIndex = 3 Then Clipboard.SetDataObject(Panel4.Controls(IndexBouton).Text)
        If TabControl1.SelectedIndex = 4 Then Clipboard.SetDataObject(Panel5.Controls(IndexBouton).Text)

    End Sub

j'ai du ré-ouvrir ce projet rien que pour toi car je me rappelais même pas de la méthode.

y'en a peut être d'autres qui sauront te répondre

sinon pour l'automatisation, j'avais aussi envie de m'y mettre, d'autant que maintenant on trouve des interfaces programmables en .net (phidget.com), mais chaque produit est à un prix exorbitant ce qui a mis fin à mes fantasmes de robots, oui je suis pas très persévérant

a+

j'oubliais, un site qui pourra t'aider  :
http://plasserre.developpez.com/vsommair.htm
Messages postés
17
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
7 mai 2009

Bonjour,

Merci pour le lien, ce site est vraiement intéressant et bien fait pour les novices.
Merci aussi pour l'exemple de code mais il me semble un peu compliqué.

Voici ce que j'ai récupéré dans ma source "Exemple":
Private

Sub Check1_CheckStateChanged(
ByVal eventSender
As System.Object,
ByVal eventArgs
As System.EventArgs)
Handles Check1.CheckStateChanged

Dim Index
As
Short = Check1.GetIndex(eventSender)

If Check1(Index).CheckState = 1
Then
SetIOchannel((Index + 1 + card_nr * 16))

Else
ClearIOchannel((Index + 1 + card_nr * 16))

End
If
End
SubCela me parrait beaucoup plus simple pour affecter une même fonction à une vingtaine de boutons.
D'après ce que j'ai pigé, le CheckBoxArray reçoit les infos de tous les boutons.
La seule chose que je ne parviens pas à réaliser, c'est définir l'index de chaque bouton dans la propriété "Index sur" qui n'apparaît même pas dans la liste des propriétés des boutons.

Si cela t'interesse, voici la description de la carte:
http://www.velleman.be/fr/fr/product/view/?id=9383

@+

Passion:
Projet d'automatisation d'une maquette ferroviaire à l'aide d'une carte d'interface Velleman K8000.
Messages postés
132
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
17 octobre 2008

en fait je viens d'essayer de re-comprendre ce bout de code et je crois qu'il y a une solution interressante quand même, même si elle n'est pas très académique

        Dim ctlSender As Control
IndexBouton sera le numéro qu'il y a à la fin du nom de ton bouton bouton1, bouton2 etc...
        Dim IndexBouton As Integer

        ctlSender = CType(sender, Control)

et là dans ce cas il prend le 9ème caractère pour connaître le numéro de bouton
       
IndexBouton = CInt(Mid(ctlSender.Name, 9 , 1))

mais si le nom est bouton1 bouton2 etc... c'est le caractère 7 qui donnera l'index, donc :

IndexBouton = CInt(Mid(ctlSender.Name, 7, 1))

et si il y a plus de 9 boutons ont mettra un truc du genre :

IndexBouton = CInt(Mid(ctlSender.Name, ,2
et les boutons devront s'appeller bouton01, bouton02, ......, bouton54  etc...

sinon je pourrai pas t'aider sur ton bout de code

a+
Messages postés
17
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
7 mai 2009

Bonjour à tous,
Et bien j'me disais que pour y arriver, il fallait persévérer.
Cela fait quelques jour que je me galère à apprendre la programmation VB et je commence à trouver cela sympa. Excusez moi si les termes ne sont pas exact mais je n'y connais pas grand chose.

Je vous rappelle un peu mon objectif: Je voulais créer une liste de boutons (ButtonArray) car tous ont la même "Fonction"...

Voici la démarche:
1°) Créer les boutons dans le concepteur de vue
_Button1_1
_Button1_2
_Button1_3
...
2°)Dans Projet/Ajouter une Référence, sélectionner:
Microsoft.VisualBasic.Compatibility.VB6


3°)Personnaliser la Boîte à outils
(Clic droit sur Tous les Windows Form/Choisir les éléments)
Puis cocher ButtonArray

4°) Faire glisser un ButtonArray dans le Form.
ButtonArray1

5°) Ajouter le code suivant dans le code généré automatiquement par le concepteur:
'_Button1_1
...

Me.ButtonArray1.SetIndex(Me._Button1_1, CType(1, Short))
...
'_Button1_2
...
Me.ButtonArray1.SetIndex(Me._Button1_2, CType(2, Short))
...
'_Button1_3
...
Me.ButtonArray1.SetIndex(Me._Button1_3, CType(3, Short))
...
6°) La déclaration est maintenant terminée, on voit apparaitre dans les proprétés des Boutons un numéro correspondant à l'"Index" du bouton dans la table. Il n'y a plus qu'à traîter les données de la liste de boutons.
Exemples:




Private


Sub
Button1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles ButtonArray1.Click
Dim Index AsShort = ButtonArray1.GetIndex(eventSender)
If M_Pres_St_(Index) = TrueThen
M_Pres_St_(Index) = False
ClearIOchannel(Index)
Else
M_Pres_St_(Index) = True
SetIOchannel(Index)
EndIf
EndSub
-----------------------------------------------------------------------------Private
Sub CheckBox_Check(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CheckBoxArray1.CheckedChanged
...
EndSub
-----------------------------------------------------------------------------

For i = 1 To 7
      LabelArray1(i).Text = "MANU / AUTO"
      LabelArray2(i).Text = "Temps d'arrêt"
      LabelArray3(i).Text = "Inversion Sens"
      TextBoxArray1(i).Text = "00:00:30"
      GroupBoxArray1(i).Text = i
Next



Ca semble tellement pratique, qu'on aurait presque envi de faire tout le programme de cette façon ...

@+

Julien



Passion:
Projet d'automatisation d'une maquette ferroviaire à l'aide d'une carte d'interface Velleman K8000.