Traitement de masse pour une plusieur Boutton (VB.NET) [Résolu]

Signaler
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010
-
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
-
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

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
156
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
28 décembre 2010

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
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.