IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

tester le vide d'une case de StringGrid


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut tester le vide d'une case de StringGrid
    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.

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    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 .

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    oui mais comment je teste tout les cases de StringGrid

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    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 .

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    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 .

  6. #6
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    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:
    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");
    Comme ca, tu attends d'avoir testé toutes les cases avant de dire que c'est bon ou pas.

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    merci mais il ya encore un probleme ,quand toute les cases sont vide s'affiche la form 4

  8. #8
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Normal, le test n'est pas tout as fait bon, il faut remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(Form1->StringGrid1->Cells[j][i]!="")
                 ToutEstRempli &= false;
    Par ceci :
    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 .

  9. #9
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Remplace
    if(Form1->StringGrid1->Cells[j][i] != "")
    par
    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...

  10. #10
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Points : 93
    Points
    93
    Par défaut
    merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii pour votre aide

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    J'ai ceci moi :
    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 ...
    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...
    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

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Voir la propriété Row pour savoir la ligne en cours !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int K1=1;K1<AdvStringGrid1->ColCount;K1++)
    pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int K1=1;(K1<AdvStringGrid1->ColCount) && ( ! existeEmptyCell );K1++)
    Pourquoi continuer une boucle inutile ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(existeEmptyCell==true)
    devrait être tout simplement
    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

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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:
    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);}
    à 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...
    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

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    C'est bon avec la propriété Row en effet ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester si une case dans un tableau est non vide
    Par mohsenuss91 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 28/12/2013, 16h44
  2. comment tester si une case d'un tableau est vide
    Par khadi8 dans le forum Débuter
    Réponses: 7
    Dernier message: 01/05/2013, 09h13
  3. Réponses: 6
    Dernier message: 11/06/2008, 16h35
  4. Réponses: 3
    Dernier message: 18/12/2007, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo