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

Signaler
Messages postés
4
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 juin 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
4
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 juin 2009

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 ?)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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.