Partilhar via


Como adicionar informações personalizadas a um controle TreeView ou ListView (Windows Forms)

Você pode criar um nó derivado em um controlo TreeView do Windows Forms ou um item derivado em um controlo ListView. A derivação permite que você adicione quaisquer campos necessários, bem como métodos personalizados e construtores para manipulá-los. Um uso desse recurso é anexar um objeto Customer a cada nó de árvore ou item de lista. Os exemplos aqui são para um controle TreeView, mas a mesma abordagem pode ser usada para um controle ListView.

Para derivar um nó de árvore

  • Crie uma nova classe de nó, derivada da classe TreeNode, que possua um campo personalizado para armazenar um caminho de ficheiro.

    Class myTreeNode  
       Inherits TreeNode  
    
       Public FilePath As String  
    
       Sub New(ByVal fp As String)  
          MyBase.New()  
          FilePath = fp  
          Me.Text = fp.Substring(fp.LastIndexOf("\"))  
       End Sub  
    End Class  
    
    class myTreeNode : TreeNode  
    {  
       public string FilePath;  
    
       public myTreeNode(string fp)  
       {  
          FilePath = fp;  
          this.Text = fp.Substring(fp.LastIndexOf("\\"));  
       }  
    }  
    
    ref class myTreeNode : public TreeNode  
    {  
    public:  
       System::String ^ FilePath;  
    
       myTreeNode(System::String ^ fp)  
       {  
          FilePath = fp;  
          this->Text = fp->Substring(fp->LastIndexOf("\\"));  
       }  
    };  
    

Para usar um nó de árvore derivado

  1. Você pode usar o novo nó de árvore derivado como parâmetro para chamadas de funções.

    No exemplo abaixo, o caminho definido para o local do arquivo de texto é a pasta Meus Documentos. Isso é feito porque você pode supor que a maioria dos computadores que executam o sistema operacional Windows incluirá esse diretório. Isso também permite que usuários com níveis mínimos de acesso ao sistema executem o aplicativo com segurança.

    ' You should replace the bold text file
    ' in the sample below with a text file of your own choosing.  
    TreeView1.Nodes.Add(New myTreeNode (System.Environment.GetFolderPath _  
       (System.Environment.SpecialFolder.Personal) _  
       & "\ TextFile.txt ") )  
    
    // You should replace the bold text file
    // in the sample below with a text file of your own choosing.  
    // Note the escape character used (@) when specifying the path.  
    treeView1.Nodes.Add(new myTreeNode(System.Environment.GetFolderPath
       (System.Environment.SpecialFolder.Personal)
       + @"\TextFile.txt") );  
    
    // You should replace the bold text file
    // in the sample below with a text file of your own choosing.  
    treeView1->Nodes->Add(new myTreeNode(String::Concat(  
       System::Environment::GetFolderPath  
       (System::Environment::SpecialFolder::Personal),  
       "\\TextFile.txt")));  
    
  2. Se lhe for passado o nó da árvore e ele for do tipo uma classe TreeNode, então precisará converter para a sua classe derivada. Casting é uma conversão explícita de um tipo de objeto para outro. Para obter mais informações sobre transmissão, consulte de conversões implícitas e explícitas (Visual Basic), Transmissão e conversões de tipo (Visual C#) ou Operador de transmissão: () (Visual C++).

    Public Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect  
       Dim mynode As myTreeNode  
       mynode = CType(e.node, myTreeNode)  
       MessageBox.Show("Node selected is " & mynode.filepath)  
    End Sub  
    
    protected void treeView1_AfterSelect (object sender,  
    System.Windows.Forms.TreeViewEventArgs e)  
    {  
       myTreeNode myNode = (myTreeNode)e.Node;  
       MessageBox.Show("Node selected is " + myNode.FilePath);  
    }  
    
    private:  
       System::Void treeView1_AfterSelect(System::Object ^  sender,  
          System::Windows::Forms::TreeViewEventArgs ^  e)  
       {  
          myTreeNode ^ myNode = safe_cast<myTreeNode^>(e->Node);  
          MessageBox::Show(String::Concat("Node selected is ",
             myNode->FilePath));  
       }  
    

Ver também

  • de controle TreeView
  • de controle ListView