Compartir a través de


Cómo: Agregar información personalizada a un control TreeView o ListView (Formularios Windows Forms)

Puede crear un nodo derivado en un control de Windows Forms TreeView o en un elemento derivado de un ListView control . La derivación permite agregar los campos que necesite, así como métodos personalizados y constructores para controlarlos. Un uso de esta característica es adjuntar un objeto Customer a cada nodo de árbol o elemento de lista. Los ejemplos aquí son para un TreeView control, pero se puede usar el mismo enfoque para un ListView control.

Para derivar un nodo de árbol

  • Cree una nueva clase de nodo, derivada de la TreeNode clase , que tiene un campo personalizado para registrar una ruta de acceso de archivo.

    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 un nodo de árbol derivado

  1. Puede usar el nuevo nodo de árbol derivado como parámetro para las llamadas de función.

    En el ejemplo siguiente, la ruta de acceso establecida para la ubicación del archivo de texto es la carpeta Mis documentos. Esto se hace porque puede suponer que la mayoría de los equipos que ejecutan el sistema operativo Windows incluirán este directorio. Esto también permite a los usuarios con niveles mínimos de acceso del sistema ejecutar la aplicación de forma segura.

    ' 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. Si recibes el nodo de árbol y está tipificado como una TreeNode clase, entonces deberás realizar un casting a tu clase derivada. El casting es una conversión explícita de un tipo de objeto a otro. Para obtener más información sobre la conversión, consulte Conversiones implícitas y explícitas (Visual Basic), Conversión y conversiones de tipos (Visual C#) o Operador de cast: () (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));
       }
    

Consulte también