Groupes de controles en vb.net

cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008 - 23 août 2006 à 21:09
julien76150 Messages postés 17 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 7 mai 2009 - 16 nov. 2008 à 01:12
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

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
23 août 2006 à 21:33
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 août 2006 à 21:51
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 #
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
23 août 2006 à 23:12
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   
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
23 août 2006 à 23:24
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.
0

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

Posez votre question
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
23 août 2006 à 23:35
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 @+
0
julien76150 Messages postés 17 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 7 mai 2009
12 nov. 2008 à 16:58
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.
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
12 nov. 2008 à 20:35
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
0
julien76150 Messages postés 17 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 7 mai 2009
13 nov. 2008 à 17:40
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.
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
13 nov. 2008 à 19:49
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+
0
julien76150 Messages postés 17 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 7 mai 2009
16 nov. 2008 à 01:12
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.
0
Rejoignez-nous