bonjour a tous ,j'ai un StringGrid qui contient des lignes et des colonnes je veut tester le vide de ces cases ,si une case n'est pa rempli une forme d'erreur s'affiche pour remplir tout les cases de StringGrid .merci pour votre d'aide d'avance.
bonjour a tous ,j'ai un StringGrid qui contient des lignes et des colonnes je veut tester le vide de ces cases ,si une case n'est pa rempli une forme d'erreur s'affiche pour remplir tout les cases de StringGrid .merci pour votre d'aide d'avance.
Salut,
tu doit tester la propriété Cells de ton stringGrid, par exemple ce code te donne le texte contenu dans la case de coordonné 0;0 (ça commence toujours par 0 et on met toujours le numéro de colonne puis celui de la ligne) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part AnsiString texte = StringGrid1->Cells[0][0];
Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation
Lisez le magazine de developpez.com. Mes tutos : http://pottiez.developpez.com
La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français
N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .
oui mais comment je teste tout les cases de StringGrid
Eh bien tu fait une double boucle pour parcourir toute les case, sachant que ton nombre de colonne est définit par la propriété ColCount du stringGrid et que le nombre de ligne est définit par la propriété RowCount du même stringGrid
Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation
Lisez le magazine de developpez.com. Mes tutos : http://pottiez.developpez.com
La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français
N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .
j'ai utilisé ce code mais sa marche pa bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for(int i=1;i<Form1->StringGrid1->RowCount;i++) for(int j=1;j<Form1->StringGrid1->ColCount;j++) { if(Form1->StringGrid1->Cells[j][i]=="") {ShowMessage("Il faut remplir tout les cases de tableau");} else {Form4->Visible=true;} }
je veut dire que si toute les cases sont remli la form4 visible =true .
Salut,
avec le code que tu as donné dès la première case testée non vide tu afficheras ta Form4. De plus tu auras autant de message que de case vide.
Il te faut plutôt un truc du genre:
Comme ca, tu attends d'avoir testé toutes les cases avant de dire que c'est bon ou pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 bool ToutEstRempli=true; for(int i=1;i<Form1->StringGrid1->RowCount;i++) { for(int j=1;j<Form1->StringGrid1->ColCount;j++) { if(Form1->StringGrid1->Cells[j][i]!="") ToutEstRempli &= false; } } if(ToutEstRempli) Form4->Show(); else ShowMessage("Il faut remplir tout les cases de tableau");
merci mais il ya encore un probleme ,quand toute les cases sont vide s'affiche la form 4
Normal, le test n'est pas tout as fait bon, il faut remplacer ceci :
Par ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(Form1->StringGrid1->Cells[j][i]!="") ToutEstRempli &= false;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(Form1->StringGrid1->Cells[j][i]=="") ToutEstRempli &= false;
Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation
Lisez le magazine de developpez.com. Mes tutos : http://pottiez.developpez.com
La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français
N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .
Remplace
parif(Form1->StringGrid1->Cells[j][i] != "")
if(Form1->StringGrid1->Cells[j][i] == "")
Et sinon, plutot qu'un test, tu peux utiliser :
if( Form1->StringGrid1->Cells[j][i].IsEmpty() )
Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii pour votre aide
J'ai ceci moi :
Mais je souhaite que la boucle ne se fasse que sur la ligne dont la cellule est sélectionnée et pas sur tout le TStringGrid...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 bool existeEmptyCell = false; for (int K1=1;K1<AdvStringGrid1->ColCount;K1++) { for( int K2=1;K2<AdvStringGrid1->RowCount;K2++) { if (AdvStringGrid1->Cells[K1][K2]==""){ existeEmptyCell = true;} } } if(existeEmptyCell==true){ShowMessage("Veuillez remplir les champs vides avant de quitter l'application");} else{ ect ...
il doit y avoir quelque chose avec "Selection" non ?
Edit: je mets la solution pour ceux qui pourraient en avoir besoin plus tard:
ça semble marcher avec AdvStringGrid->Selection.Top
Voir la propriété Row pour savoir la ligne en cours !
pourrait devenir
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (int K1=1;K1<AdvStringGrid1->ColCount;K1++)
Pourquoi continuer une boucle inutile ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (int K1=1;(K1<AdvStringGrid1->ColCount) && ( ! existeEmptyCell );K1++)
devrait être tout simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(existeEmptyCell==true)
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(existeEmptyCell)
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bon, en fait je percute pas :
Je souhaite donc supprimer la ligne dont la cellule est sélectionnée et je veux tester les cases de la ligne car si elles sont toutes vides je demande pas de confirmation par ShowMessage...
J'ai ceci:
à chaque fois que j'ai une case vide j'incrémente compteur, et si compteur = 6 c'est que toutes les cases sont vides , comme j'ai 6 colonnes dans la ligne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int compteur = 0; for (int K1=1;K1<AdvStringGrid1->ColCount ;K1++) { for( int K2=1;K2<AdvStringGrid1->Selection.Top ;K2++) { if (AdvStringGrid1->Cells[K1][K2]==""){ compteur++;} } } if(compteur==6){ ((jStringGrid*) AdvStringGrid1)->DeleteRow(AdvStringGrid1->Selection.Top);}
Je pense effectivement qu'on peut faire plus simple sans faire une double boucle car finalement je ne parcours que les colonnes, la ligne c'est la sélection....
Je pige pas trop ta deuxième ligne de code ShaiLeTroll
C'est bon avec la propriété Row en effet ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager