2011-07-27 1 views
0

Il existe une arborescence avec 2 niveaux d'éléments. Je dois ajouter un texte de tous les éléments "sub" (niveau 1) sélectionnés dans un mémo.Delphi: vérification de la sélection dans l'arborescence

for i := 0 to pred(TreeView1.Items.count) do 
if (TreeView1.Items.Item[i].Selected) and (TreeView1.Items.Item[i].Level=1) 
    then 
     begin 
      Memo1.Lines.Add(TreeView1.Items.Item[i].Text) 
     end; 

Mais comment ajouter tous les éléments « sous » à la fois sans leur contrôle (sélectionné ou non) si leurs parents (niveau 0) est sélectionné? Par exemple. Je sélectionne les 3 objets avec le niveau 0 et leurs enfants sont ajoutés dans le mémo.

Merci pour votre aide!

Répondre

3

obtenir Seuls les nœuds de niveau 1 qui ont un parent sélectionné:

var 
    Node: TTreeNode; 
    Sub: TTreeNode; 
begin 
    Node := TreeView.Items.GetFirstNode; 
    while Node <> nil do 
    begin 
    if Node.Selected then 
    begin 
     Sub := Node.GetFirstChild; 
     while Sub <> nil do 
     begin 
     Memo1.Lines.Add(Sub.Text); 
     Sub := Sub.GetNextSibling; 
     end; 
    end; 
    Node := Node.GetNextSibling; 
    end; 
end; 

Mise à jour en raison de commentaires:

nœuds Get niveau 1 qui ont un parent sélectionné, ou sont eux-mêmes sélectionnés

var 
    I: Integer; 
begin 
    for I := 0 to TreeView.Items.Count - 1 do 
    with TreeView.Items[I] do 
     if (Level = 1) and (Selected or Parent.Selected) then 
     Memo1.Lines.Add(Text); 
end; 
+0

merci beaucoup! – maxfax

+0

Pourriez-vous compléter le code? Je dois ajouter Sub.Text si un enfant est également sélectionné. Pas seulement les parents comme dans votre code. Merci! – maxfax

+0

Parfait !!! Merci beaucoup!!! – maxfax

1

Il me semble que vous recherchez tous les nœuds sélectionnés qui ont un nœud parent. La meilleure façon de le faire est la suivante:

procedure EnumerateSelectedNonTopLevelItems(TreeView: TTreeView; List: TStrings); 
var 
    Node: TTreeNode; 
begin 
    for Node in TreeView.Items do 
    if Node.Selected and Assigned(Node.Parent) then 
     List.Add(Node.Text); 
end; 

Cette routine vous donnera noeuds à des niveaux 2, 3, 4 etc. Puisque vous avez seulement le niveau 0 et le niveau 1 cela est bien beau. Si vous avez vraiment besoin des nœuds qui sont des descendants directs de nœuds de niveau supérieur, vous pouvez modifier le test comme ceci:

if Node.Selected and Assigned(Node.Parent) and not Assigned(Node.Parent.Parent) then 
+0

Merci! Mais cela ne fonctionne pas pour les parents :(Seuls les enfants sont ajoutés – maxfax

+0

@maxfax Je pensais que vous vouliez seulement les enfants ajoutés –

+0

Merci beaucoup pour l'aide !!! – maxfax

Questions connexes