Traitement de masse pour une plusieur Boutton (VB.NET)

Résolu
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010 - 27 mai 2009 à 15:57
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 27 mai 2009 à 18:00
Bonjour je suis passé en VB.NET et je rencontre quelque difficulté notamment dans l'absence de variable index pour chainer un traitement.

J'essaie de me faire comprendre avec un exemple. Sous VB6 je faisais :

For i = 0 to command.ubound
      command(i).caption = "test" & i
Next i

Je pense qu'avec l'exemple vous comprenez mieux mon problème du a l'absence de cette variable. Existe quelque chose sous VB.Net qui pourrai me permettre de pallier a l'absence de cette variable.

Merci d'avance a ceux qui m'aideront.

PROTEUS

3 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 mai 2009 à 17:20
Bonjour,

Les contrôles indexés ne se font plus en .Net, il faut créer tes contrôles dynamiquement ce qui implique de placer des procédure "délégés" puis d'ajouter un évenement ce qui fait saisir pas mal de code à moins de passer par une boucle pour leurs création et un TableLayoutPanel/FlowLayoutPanl pour leur dispositions.

Sinon tu peux placer tes contrôles créés en mode design dans un conteneur de type panel puis appler cette méthode :

Dim cnt As Integer

For Each Ctrl In Panel.Controls
    Dim MyButton As Button = ctrl
    MyButton.Text = "Test" & cnt
    cnt += 1
Next

Ceci peut se faire avec une boucle For To/Next bien entendu !

Le problème étant que tu est obligé de ne placer dans tes pannel que les bouton que tu veux modifier,
ou encore de passer par :

If TypeOf (Panel.Controls(i)) Is Button Then
[...]
End If

Mais ceci modifira tout les boutons de ton panel.

@+ Mayzz.
3
PROTEUS91 Messages postés 156 Date d'inscription mardi 4 novembre 2003 Statut Membre Dernière intervention 28 décembre 2010
27 mai 2009 à 17:52
Merci pour la piste, mais une question me vient necessairement a l'esprit, Et pourquoi pas un cumul des deux ?

For Each Ctrl In Panel.Controls
    Dim MyObject As Object = Ctrl
    If TypeOf MyObject Is Button Then
             MyObject .Text = "Test" & Cnt

             Cnt += 1
    End If
Next

Je ne sais pas si ca marche comme ca mais si ça marche cela permettrai de mettre dans un panel plusieurs type de contrôle et de n'affecter la modification voulu qu'a une famille de control dans un panel cible.

J'ai tout de meme une derniere question dans la boucle for Each, si on lui demande de regarder dans un panel dans lequel nous avons deja disposer un autre panel les controls de cet autre panel (dependant) seront ils eux aussi modifiés ?

Merci d'avance pour ton aide :) Tu m'as bien aidé :)

PROTEUS
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 mai 2009 à 18:00
Re,

Oui c'est bien ce que je te proposais plus haut, de faire le mix des deux, sauf si tu ne désire que mettre des boutons dans ton conteneur.

Pour répondre à ta question non, le contrôle sera détecté comme un contrôle standard, c'est comme pour une arborescence de répertoires, il faut faire une autre boucle ou un appel recursif si tu veux parcourir tout tes contrôles.
0
Rejoignez-nous