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 :

sélection dans Treeview


Sujet :

C++Builder

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut sélection dans Treeview
    J'ai deux classes :
    A contient un bouton1 et un memo ;
    B contient un treeview et un bouton2

    je voudrais qu'une fois je clic sur bouton2 après une selection dans treeview, j’enregistre les items sélectionnés dans un vecteur et par le constructeur de la classe B, je transite le vecteur dans la classe A pour l'ajouter dans un memo; l'ajout se fait d'une façon bien précis, c'est à dire j'ai une ligne comme suit
    int a, b , c , d;
    je dois rajouter les éléments sélectionnés avant le point virgule, j'ai fait comme suit :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    class A {
     
    void bouton1Click(TObject *Sender) {
    TStringList *v = new TStringList ;
    TStringList *List = new TStringList();
    B *objet = new B objet(this,v);
    for (int i=0; i<memo->lines->count; i++)
    if (AnsiPos("instance",memo->lines->strings[i] && m = -1)
    m = i; 
    if (m>0)
    {
    for (i=m ; i<memo->Lines->Count; i++)
    if(AnsiPos(";",memo->Lines->Strings[i] ) && n == -1 )
    n = i;
    for(i=0;i<m;i++)
    List->Add(memo->Lines->Strings[i]);
    List->Add(memo->Lines->Strings[m].SubString(0,memo->Lines->Strings[m].Pos("instance")+4));
    UnicodeString strM ;
    List->Insert(m+1,strM+ str+",");
    strM = str;
    List>Add(memo>Lines>Strings[n].SubString(memo>Lines>Strings[n].Pos(";"),memo->Lines->Strings[n].Length())) ;
     for(i = n+1 ; i<memo->Lines->Count ; i++)
                    List->Add(memo->Lines->Strings[i]);
                    memo->Clear();
                    for(int w=0 ; w<List->Count ; w++)
                    memo->Lines->Add(List->Strings[w]);
     
                    delete objet ;
      } }}
     
    class B {
     
     
    __fastcall B(TComponent *Owner, TStringList *v)
    {
     
    UnicodeString instance = " A, B , C, D"
    v2 = v ;
    .....
    }
     
    TStringList v2 ;
    void __fastcall bouton2Click(TObject *Sender)
    {
     
    v2->Add(TreeView1->Selections[i]->Text);
    }

    le problème c'est si je clique une fois sur bouton2 le vecteur ajoute un seul,
    la ligne "A,B, C, D ;" est supprimé de memo , est remplacé par l'item selectionné
    c'est à dire au lieu d'avoir A,B, C, D, E ;sachant que l'item selectionné est E, j'ai E,
    je voudrais garder à chaque fois je clique sur ajouter, la ligne A,B, C, D ;et ajouté les items juste avant le D

    un autre problème c'est qu'une fois sélectionne plusieurs items et je clic sur bouton2, j'ai le message d'erreur suivant :
    Opérateur de pointeur incorrecte

    quelqu'un pourrait t'il m'aider

  2. #2
    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
    Bonjour,
    Je ne sais pas si ça vient de moi, mais je ne comprend pas ce que tu souhaite faire. Ta solution à l'air très complexe, et ton problème assez simple, mais je n'ai probablement pas tout saisie.

    Serait-il possible que tu réexplique plus simplement:
    1) Ce que tu souhaite faire
    2) Ce que tu as réussi à faire
    3) Ce qui ne fonctionne pas ou que tu n'arrive pas à faire

    Ce que je comprend (mais ça ne doit pas être ça):
    Tu veux ajouter dans un Memo la valeur sélectionnée dans un Treeview à chaque appuis sur un bouton?
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Serait-il possible que tu réexplique plus simplement:
    1) Ce que tu souhaite faire
    En fait j'ai un memo, initialiser par la ligne suivante
    int A,B,C,D;
    Je souhaite ajouter des items sélectionnés dans un TreeView à chaque clic sur le bouton2, mais l'emplacement de l'ajout ne suit pas le curseur de la souris, je voudrais bien que si par exemple je sélectionne l'item E , il doit être ajouter dans un Memo juste après la lettre'd' et juste avant '; 'c'est à dire int A,B,C,D,E;
    et si je clic une autre fois sur un element de TreeView et je clic sur le bouton2
    je dois avoir l'element selectionné juste après la lettre E et juste avant point virgule.... ainsi de suite
    2) Ce que tu as réussi à faire
    3) Ce qui ne fonctionne pas ou que tu n'arrive pas à faire
    pour ce faire, j'ai pensé de charger un vecteur des éléments selectionnés et le passer via le constructeur dans la classe ou y'a le memo, pour pouvoir l'ajouter dans Memo, je voudrais conserver dans le vecteur les éléments entrées auparavant par exemple le vecteur supprime la ligne A,B,C,D; et la recrée une fois je clic sur le bouton2 avec l'ajout du premier item sélectionné, un autre clic sur le bouton2, le vecteur conserve la ligne crée auparavant et ajoute le deuxième items sélectionné, ainsi de suite, je pourrai aussi sélectionner plusieurs items et les ajoutés dans le vecteur pour les ajoutès finalement dans Memo



    Ce que je comprend (mais ça ne doit pas être ça):
    Tu veux ajouter dans un Memo la valeur sélectionnée dans un Treeview à chaque appuis sur un bouton?
    c'est exactement ça, mais je voudrais bien qu'il l'ajoute dans un endroit bien prècis, comme je t'ai expliqué en dessus

    Je te remercie

  4. #4
    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
    Une solution simple:
    1) Tu utilise un TStringList pour stocker les différentes valeurs (au départ tu l'initialise avec les 4 valeurs par défaut A B C D).
    2) Une simple boucle for te permet d'afficher le contenu du TStringList dans ton memo en ajoutant une virgule ',' entre, et un ';' final

    Une ébauche (très) perfectible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //déclaration de la liste
    TStringList *myList;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //instanciation et initialisation de ta liste de stockage au départ:
    myList = new TStringList();
    //on rentre au départ les valeurs par défaut
    myList->Add( "A" ) ;
    myList->Add( "B" ) ;
    myList->Add( "C" ) ;
    myList->Add( "D" ) ;
    A chaque appui sur ton bouton tu stocke la valeur dans myList, puis tu affiche le contenu de myList dans ton memo:
    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
    //Sauvegarde de la valeur sélectionnée dans le treeview:
      myList->Add( TreeView1->Selected->Text );
     
    //Construction de la chaine séparée par des virgules:
      AnsiString s = myList->Strings[0] ; //première valeur /!\ tester que la liste n'es pas vide
      for( int i=1; i< myList->Count; i++)
      {
         //valeur 2 à N
        s = s + " , " + myList->Strings[i] ;
      }
      //on ajoute le ';' final
      s = s + " ; " ;
     
      //on affiche dans le memo:
      memo->Lines->Text = s ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //libération des ressources à la fin du programme
    delete myList;
    Je n'ai pas Builder sous la main, il peut y avoir quelques erreurs...
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    avec memo->Lines->Text = s ;
    On ajoute les éléments de TStringList dans l'endroit de curseur et c'est pas ce que je cherche à faire, c'est pour cela que à chaque fois je supprime la ligne et je recrée une autre en cherchant le mot "instance" et le point virgule parce que la ligne est après le mot instance dans Memo, sinon je voudrais avoir les éléments sélectionnés dans un seul ligne, et non pas par exemple de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    instance 
    int A,B,C,D
    e,
    f ,
    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
    //Sauvegarde de la valeur sélectionnée dans le treeview:
      myList->Add( TreeView1->Selected->Text );
     
    //Construction de la chaine séparée par des virgules:
      AnsiString s = myList->Strings[0] ; //première valeur /!\ tester que la liste n'es pas vide
      for( int i=1; i< myList->Count; i++)
      {
         //valeur 2 à N
        s = s + " , " + myList->Strings[i] ;
      }
      //on ajoute le ';' final
      s = s + " ; " ;
     
      //on affiche dans le memo:
      memo->Lines->Text = s ;

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut belfort90
    Si j'ai bien compris tu veut que ton Memo affiche ceci
    instance,A,B,C,D
    instance,A,B,C,D,f
    Si c'est le cas quand tu lis le contenu de ta ligne elle se termine par " \r\n " qui ne sont pas visible mais bien la, il faut les supprimer pour cela il faut voir du cote de " LeftStr MidStr RightStr " ne pas oublier d'inclure " #include "StrUtils.hpp" " un exemple
    String toto = Memo1->Text;
    toto = LeftStr(toto, toto.Length() - 2);
    toto = toto + "," + "f";
    Memo1->Lines->Add(toto);
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Tu peut aussi voir du cote de
    String toto = Memo1->Lines->Strings[0];
    et
    Memo1->Lines->Strings[0] = toto;
    ici dans Strings[0] " 0 " represente le numero de la ligne lue ecrite
    suivant ce que tu veut faire
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Si c'est le cas quand tu lis le contenu de ta ligne elle se termine par " \r\n " qui ne sont pas visible mais bien la, il faut les supprimer pour cela il faut voir du cote de " LeftStr MidStr RightStr " ne pas oublier d'inclure " #include "StrUtils.hpp" " un exemple
    Salut, la façon la plus simple de supprimer " \r\n " c'est d'utiliser Trim ou TrimRight si les caractères de contrôle et les espaces se trouve toujours en fin de chaîne.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. Problème Sélection dans un Treeview
    Par benstile dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/01/2010, 17h57
  2. [1.1] voir la sélection dans un TreeView
    Par Monstros Velu dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/11/2009, 18h15
  3. Redirection automatique lors d'une sélection dans un Select
    Par MiJack dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2004, 18h09
  4. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43
  5. icon dans treeview ou listview
    Par Sebinou dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2004, 00h29

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