TTreeView: Come verificare se un child di uno specifico item è selezionato

di al.delphi il
5 risposte
Ciao a tutti,

ho una TreeView con un solo RootNode che contiene vari items che, a loro volta, hanno dei child. Ora, la mia esigenza è di aprire una specifica finestra se viene selezionato un qualsiasi child dell'item[1].

Il seguente codice fa esattamente ciò che mi serve. Non avendo io però particolare esperienza con la TreeView vorrei chiedervi se c'è un metodo migliore o se questo codice va bene così come è.
var
  Node: TTreeNode;
  i: Integer;
begin
  Node := TreeView1.Items[1].getFirstChild;
  if Node.Selected then
    begin
      ShowMessage('Subitem 1 is selected');
      Exit;
    end
  else
    begin
      for i := 0 to TreeView1.Items[1].Count - 2 do
        begin
          Node := Node.getNextSibling;
          if Node.Selected then
            begin
              ShowMessage('Subitem ' + IntToStr(i + 2) + ' is selected');
              Exit;
            end;
        end;
    end;
  ShowMessage('No subitem selected');
end;
Ale

5 Risposte

  • Ho limitato l'esecuzione del codice ai soli children di item1 interessati. L'uso di repeat ha reso il codice più lineare. Meglio così. : )
    var
      Node: TTreeNode;
    begin
      Node := TreeView1.Items[1].getFirstChild;
      repeat
        if Node.Selected then
          begin
            ShowMessage('Subitem ' + Node.Text + ' is selected');
            Exit;
          end;
        Node := Node.getNextSibling;
      until Node = nil;
    end;
    Ale
  • al.delphi ha scritto:


    ho una TreeView con un solo RootNode che contiene vari items che, a loro volta, hanno dei child. Ora, la mia esigenza è di aprire una specifica finestra se viene selezionato un qualsiasi child dell'item[1].
    Invece di verificare se un determinato nodo dell'albero ha uno degli elementi selezionati, non sarebbe più facile e veloce agire al contrario, ossia partire dal nodo selezionato e verificare se il suo genitore (ParentNode) è quello che ci si aspetta?

    Ciao!
  • Quindi, se Node.Selected è ParentNode di uno specifico Node.Text. Provo subito. Grazie! : )

    Ale
  • al.delphi ha scritto:


    Quindi, se Node.Selected è ParentNode di uno specifico Node.Text.
    No, in realtà è così:
    TreeView.SelectedItem.ParentNode = TreeNodeInteressato
  • Nel mio caso, il seguente codice è funzionale:
    if NOT TreeView1.Selected.IsFirstNode AND (TreeView1.Selected.Parent.Text = 'Nome_Nodo_Interessato') then ShowMessage(TreeView1.Selected.Text);
    Che semplicità meravigliosa. Grazie, Alka!

    Ale
Devi accedere o registrarti per scrivere nel forum
5 risposte