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 éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    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
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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];

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

  4. #4
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    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 émérite
    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
    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 éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    merci mais il ya encore un probleme ,quand toute les cases sont vide s'affiche la form 4

  8. #8
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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;

  9. #9
    Membre Expert
    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 : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    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() )

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

  11. #11
    Membre éclairé
    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
    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
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 049
    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 éclairé
    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
    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 éclairé
    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
    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