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

Delphi Discussion :

suppression multiple dans un treeview


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut suppression multiple dans un treeview
    bonjour !

    Voilà j'aimerais supprimer plusieurs élémenents dans un treeview ...

    Quelqu'un aurait il une idée ?

    Voici à partir de quoi je suis parti:


    procedure TForm2.suppClick(Sender: TObject);
    var
    a:integer;
    begin
    For a := 0 to Treeview1.Items.Count-1 do
    begin
    if Treeview1.Items[a].Selected then
    Treeview1.Items[a].Delete;
    end;
    end;

    Le probleme c'est que "Treeview1.Items.Count" n'est plus bon et cela genere des erreurs...

    Merci

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    Deux règles de base.

    1) Une pour le Forum: utilise les balises code stp.

    2) Une pour la programmation: Pour la suppression, toujours parcourrir les éléments en commençant par la fin (sinon quand tu supprime un élément tu décale tes indices).

    Donc dans ton cas, ce serait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm2.suppClick(Sender: TObject);
    var
    a:integer;
    begin
    For a := Treeview1.Items.Count-1  downto 0 do
    begin
    if Treeview1.Items[a].Selected then
    Treeview1.Items[a].Delete;
    end;
    end;
    A+.
    For crying out loud !

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Essaye ceci en utilisant while qui va réévaluer Count à chaque boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.Button1Click(Sender: TObject);
    var 
      I: Integer;
    begin
      I := 0 
      while I < TreeView1.Items.Count do
      begin
        if  TreeView1.Items[I].Selected then
          TreeView1.Items.Delete(I)
        else 
          Inc(I);   
      end;
    end;
    @+ Claudius

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut ben ca marche pas ...
    merci mais rien ne fonctionne ...

    PadawanDuDelphi : il n'y a qu'un élément supprimé et toujours celui cliqué ...

    Cl@udius : (apres correction sinon delphi rale ...) Ben ce code supprime tout les éléments qui suivent ...

  5. #5
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    J'ai fait le test avec mon code, ca fonctionne (as-tu mis la propriete multi-select à true?) la plupart du temps.
    Avec un toutefois un comportement bizarre par moment: tous les éléments qui s'efface. Le problème survient lorsque tu selectionne uniquement le dernier noeud à effacer (peut-etre une selection par défaut?).

    Pourquoi ne pas selectionner les indices à effacer dans ce cas?
    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
    procedure TForm1.Button4Click(Sender: TObject);
    var
    a:integer;
    Selection: array of integer;
    begin
    
    For a := Treeview1.Items.Count-1  downto 0 do
    begin
    //sauvegarde de la selection par ordre décroissant.
    if Treeview1.Items[a].Selected then begin
        Setlength(Selection,length(Selection)+1);
        Selection[length(Selection)-1]:= a;
    end;
    end;
    
    For a := 0  to length(selection)-1 do
    //effacement de la selection.
       TreeView1.Items[Selection[a]].Delete;
    
    end;
    J'ai pas fait tous les tests, mais dans la majoriter des cas ca a l'air de passer...

    A+.
    For crying out loud !

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Je suis arrivé à peu près à la même solution que Padawan. Mais je me demande si il n'y a pas plus simple

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
      aSelIndexes: array of integer;
    begin
      with TreeView1 do
      begin
        Items.BeginUpdate;
        try
          for i := 0 to Items.Count - 1 do
          begin
            if Items[i].Selected then
            begin
              SetLength(aSelIndexes, High(aSelIndexes) + 2);
              aSelIndexes[High(aSelIndexes)] := i;
            end;
          end;
          for i := High(aSelIndexes) downto 0 do
            Items[aSelIndexes[i]].Delete;
        finally
          Items.EndUpdate;
          Setlength(aSelIndexes, 0);
        end;
      end;
    end;
    @+ Claudius

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut ha ben voilà !
    merci PadawanDuDelphi !
    ce code fonction bien ... sélèction simple, en série et aléatoire

    c'est impecable !


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

Discussions similaires

  1. Suppression multiple dans DBGrid en Interbase
    Par masterdash dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/11/2012, 10h14
  2. suppression multiple dans form
    Par evevev dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2011, 06h48
  3. [JavaScript] Suppression des multiples dans un tableau (array) alphanumérique
    Par danielhagnoul dans le forum Contribuez
    Réponses: 0
    Dernier message: 07/06/2011, 11h40
  4. eviter le check multiple dans treeview
    Par sihammaster dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/04/2010, 16h43
  5. suppression multiple dans un StringGrid
    Par ludojojo dans le forum C++Builder
    Réponses: 26
    Dernier message: 31/05/2008, 12h35

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