bonjour
mon probleme c'est de chercher le contenu de Edit dans les lignes de la premier colonne de 12 StrinGrid .est ce que c'est possible?
merci d'avance pour votre aide.
bonjour
mon probleme c'est de chercher le contenu de Edit dans les lignes de la premier colonne de 12 StrinGrid .est ce que c'est possible?
merci d'avance pour votre aide.
Salut, pour lire tout les TStringGrid fait qqchose du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for ( int x=0 ; x<ComponentCount ; x++) { if (Components[x]->ClassNameIs("TStringGrid")) { TStringGrid *StringGrid = dynamic_cast<TStringGrid *>(Components[x]); // ICI tu utilises StringGrid pour accéder à sa première colonne } }
Salut !
Je vais supposer que les TStringGrid appartiennent à Form1.
En global :
Dans le constructeur de TForm1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2TList *MyGrids = new TList;
Ce qui permet donc d'avoir la liste des StringGrid à l'exécution pendant toute la durée du programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for(int j = 0; j < ComponentCount; j++) { if(Components[j]->ClassNameIs("TStringGrid")) { MyGrids->Add(Components[j]); } }
Il est bien entendu possible de les mettre en liste lors d'une création dynamique d'objets.
On saurait faire aussi :
Si les StringGrids sont éparpillés un peu partout, dans d'autres fenêtres, dans ce cas il faudrait procéder manuellement pour chacune d'elles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TStringGrid *StringGrid = new TStringGrid(this); StringGrid->Parent = this; MyGrids->Add(StringGrid);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //En global dans l'unité des autres forms extern TList *MyGrids;L'intérêt dans tout ça, c'est bien évidemment de ne plus avoir à les rechercher !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //Dans le constructeur d'une form MyGrids->Add(StringGrid1);
Maintenant pour aller chercher l'information par colonne :
On pourrait bien sûr utiliser Cells ... et tout dépend de ce que l'on doit faire au juste !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 TStringGrid *Target; for(int j = 0; j < MyGrids->Count; j++) { Target = (TStringGrid*)MyGrids->Items[j]; if(Target->Cols[0]->IndexOf(Edit1->Text) != -1 ) { } }
Ne pas oublier de libérer MyGrids dans la OnClose de Form1 :
A plus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MyGrids->Clear(); delete MyGrids;
Je suppose que tes StringGrid sont sur la même fiche Form1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 for ( int comp = 0 ; comp < ComponentCount ; comp++) { if (Form1 -> Components[comp] ->ClassNameIs("TStringGrid")) { TStringGrid *StrGrd = dynamic_cast<TStringGrid *>(Components[comp]); for(int i = 0 ; i < StrGrd -> RowCount ; i++) if(StrGrd -> Cells[0][i] == Edit1 -> Text) { // A FAIRE CE QUE TU VEUX ... ... } } }![]()
Bonjour
j'ai un petit probleme, mes StringGrid sont sur la meme fiche2 et meme les rèsultats de travail sur la fiche 2, le boutton qui èxecute ce code dans la fiche 3 , le code ne fonctionne pas part contre si je le met dans la fiche 2 il marche bien, et je ne sais pas ou est le probleme
merci d'avance pour votre aide
Si tu utilise le code que je t'ai proposé :
Dans la fiche3 il faut ajouter l'entete de la fiche2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include "fiche3.h"
Partager