Groupe de contrôles (Index en VB6) sur une Winform (.NET)

gilleshugues Messages postés 4 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 juin 2009 - 29 juin 2009 à 15:10
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 30 juin 2009 à 18:40
Bonjour ,

Je travaille sur un projet en C++/CLI (.NET) sous Visual C++ Express 2008 .

Je cherche l'équivalent de la propriété "Index" qu'on pouvait associer à un contrôle VB6 pour créer un groupe de contrôles .

Par exemple un groupe de labels dont on peut modifier le caption par une boucle en utilisant l'index :

For i = 1 To 10
  Label[i].Caption = "Essai"
Next i

Je n'ai rien trouvé de tel dans VC++ , et qui soit également compatible avec l'éditeur graphique intégré .

Quelqu'un a une piste ? Merci

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 juin 2009 à 21:56
Il faut OUBLIER les faux concepts de l'interprété profond tel que VB malgré que tu veuilles continuer avec de l'interprété..

En vrai code, on ferait un truc de ce genre:
HWND hctrls[10]; // A TOI DE SAVOIR COMBIEN

Dans WM_INITDIALOG:
for(i = 0; i < 10; i++) {
  hctrls[i] = GetDlgItem(hdlg, ID_CTRL0 + i);
}

ciao...
BruNews, MVP VC++
0
gilleshugues Messages postés 4 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 juin 2009
30 juin 2009 à 12:03
Merci pour la réponse , c'est bien ce que j'en avais déduit , cette fonction (pourtant intéressante) n'existe pas en VC++ .NET .

Il faut donc soit travailler sur les ID des composants (ta méthode) , soit je pense créer les objets manuellement dans la Form (avec un array) :

// Déclaration du tableau
private array <Label^>^ Tableau ;

// Création du tableau , mais ça ne créé pas pour autant les éléments du tableau (pas facile à comprendre
// la première fois)
Tableau = gcnew array<Label^>(10);

for (int i=0;i<10;i++)
{
     this->Tableau[i] = gcnew(Label());
     this->Tableau[i]->Text = "coucou";
     // autres propriétés (Location,Size ...)
}

L'inconvénient est qu'on doit le déclarer en dehors des lignes générées par le concepteur graphique sinon il ne fonctionne plus (enfin je pense) , et donc tout saisir à la main .

Voila ce que je penserait faire , est ce que ça pourrait fonctionner ? Je pense avoir un problème avec la propriété "Name" de chaque label (à moins que ça ne soit pas important ici pourvu qu'ils aient tous un nom différent ?)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 juin 2009 à 18:40
Salut,

Les indexs de VB6 était trop simple. Fallait bien qu'il compliquent tout en VB.NET !

Autre solution pour t'en sortir, la Form a une propriété Controls qui revient à une collection des controls de la form.
Après tu peux regarder le type des controls ou mettre une valeur dans leurs propriété Tag pour définir des groupes.
(Attention, si un contrôle est placé dans un control de la form, il appartient uniquement à la collection Controls de son parent)

Exemple ici.
0
Rejoignez-nous