Cómo crear una propiedad de clave para un nodo de TreeView en Visual C#

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte 311318 .

EN ESTA TAREA

Resumen

En versiones anteriores del control TreeView , unnodo de TreeViewtiene una propiedad de clave donde se puede almacenar información que pertenece a ese nodo. Puede utilizar esta clave para hacer referencia a los objetos de la colección de nodos. Esto resulta útil si se puede cambiar el orden de los objetos de la colección, o si necesita algún tipo de acceso indizado a los datos subyacentes. La versión del control TreeView que se incluye con Visual Studio .NET 2002 no tiene ninguna propiedad equivalente de clave .

Si desea utilizar la propiedad Key , tiene dos opciones:

  • Si debe almacenar información simple acerca del objeto, utilice la propiedad Tag del objeto TreeNode .
  • Si necesita la funcionalidad de indización basada en la colección, puede extender la clase TreeNode e implementar IDictionaryEnumerator.
En este artículo paso a paso describe la segunda opción y proporciona un ejemplo de cómo extender la clase TreeNode para agregar compatibilidad para una propiedad de clave .

Extender el control TreeView

  1. Cree un nuevo proyecto de biblioteca de controles de Windows:
    1. Inicie Visual Studio .NET o Microsoft Visual Studio 2005.
    2. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto.
    3. En la lista Tipos de proyecto , haga clic en Proyectos de Visual C#.


      Nota: En Visual Studio 2005, haga clic en Visual C# en Tipos de proyecto.
    4. En la lista plantillas , haga clic en Biblioteca de controles de Windows.
    5. En el cuadro de texto nombre , escriba TreeViewEXy, a continuación, haga clic en Aceptar.
    6. En el explorador del proyecto, cambie el nombre del módulo de clase predeterminado desde UserControl1.cs a TreeViewEX.cs.
    7. En la ventana de propiedades del control de usuario, cambie el nombre del control de UserControl1 a TreeViewEX.
  2. Heredar del control TreeView . De forma predeterminada, un proyecto de control de usuario hereda de System.Windows.Forms.UserControl. Cambie la declaración de clase para que herede de System.Windows.Forms.TreeView, como sigue:

    Nota: no modifique la sección de código generado por el Diseñador de componentes .
    public class TreeViewEX : System.Windows.Forms.TreeView
  3. A continuación, cree una nueva clase TreeNode que herede de System.Windows.Forms.TreeNode. Puede hacerlo en el mismo módulo de clase TreeViewEX.cs o puede crear un módulo de clase independiente. Esta clase también implementa la interfaz IDictionaryEnumerator y agrega compatibilidad para enumerar los nodos de una colección. En este ejemplo, se utiliza el módulo de clase TreeViewEX.cs existente para esta nueva clase. Para crear la clase, agregue la siguiente definición de clase a TreeViewEX.cs:
    public class TreeNode : System.Windows.Forms.TreeNode, IDictionaryEnumerator{
    private DictionaryEntry nodeEntry;
    private IEnumerator enumerator;

    public TreeNode()
    {
    enumerator = base.Nodes.GetEnumerator();
    }

    public string NodeKey
    {
    get
    {
    return nodeEntry.Key.ToString();
    }

    set
    {
    nodeEntry.Key = value;
    }
    }

    public object NodeValue
    {
    get
    {
    return nodeEntry.Value;
    }

    set
    {
    nodeEntry.Value = value;
    }
    }

    public DictionaryEntry Entry
    {
    get
    {
    return nodeEntry;
    }
    }

    public bool MoveNext()
    {
    bool Success;
    Success = enumerator.MoveNext();
    return Success;
    }

    public object Current
    {
    get
    {
    return enumerator.Current;
    }
    }

    public object Key
    {
    get
    {
    return nodeEntry.Key;
    }
    }

    public object Value
    {
    get
    {
    return nodeEntry.Value;
    }
    }

    public void Reset()
    {
    enumerator.Reset();
    }
    }

  4. Esto finaliza el control TreeView extendido. Ahora compruebe que el proyecto se compila sin errores haciendo clic en Generar solución en el menú Generar .

Crear la aplicación cliente

  1. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto.
  2. En la lista Tipos de proyecto , haga clic en Proyectos de Visual C#.

    Nota: En Visual Studio 2005, haga clic en Visual C# en Tipos de proyecto.
  3. En la lista plantillas , haga clic en Aplicación para Windows.
  4. Agregue una instancia del control TreeViewEX al formulario predeterminado del proyecto de aplicación de Windows:
    1. En el menú Herramientas , haga clic en Personalizar cuadro de herramientas.
    2. Haga clic en la ficha Componentes de.NET Framework .
    3. Haga clic en Examinary, a continuación, busque el archivo TreeViewEX.dll que se acaba de crear.
    4. Haga clic en Aceptar.
    5. El control TreeViewEX ahora se encuentra en el cuadro de herramientas. Agregue una instancia de este control al formulario.
  5. Agregue dos botones de comando al formulario.
  6. Pegue el código siguiente en el evento Load del formulario:
    this.treeViewEX1.Left = 10;this.treeViewEX1.Top = 10;
    this.treeViewEX1.Width = this.Width - 30;
    this.treeViewEX1.Height = (int)(this.Height * 0.6);
    this.treeViewEX1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;

    this.button1.Top = treeViewEX1.Height + 20;
    this.button1.Left = 10;
    this.button1.Width = 200;
    this.button1.Height = 50;
    this.button1.Text = "Add Items to TreeViewEx";

    this.button2.Top = button1.Top + button1.Height + 10;
    this.button2.Left = 10;
    this.button2.Width = 200;
    this.button2.Height = 50;
    this.button2.Text = "Locate Item in TreeView using the Key Value";
    this.Height = 400;

  7. Pegue el código siguiente en el evento Click de Button1:
    TreeViewEX.TreeNode tn;string myData;

    myData = "Extra Information pertaining to Node";

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 1";
    tn.NodeKey = "node1";
    tn.NodeValue = myData + " 1";
    treeViewEX1.Nodes.Add(tn);

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 2";
    tn.NodeKey = "node2";
    tn.NodeValue = myData + " 2";
    treeViewEX1.Nodes.Add(tn);

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 3";
    tn.NodeKey = "node3";
    tn.NodeValue = myData + " 3";
    treeViewEX1.Nodes.Add(tn);

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 4";
    tn.NodeKey = "node4";
    tn.NodeValue = myData + " 4";
    treeViewEX1.Nodes.Add(tn);

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 5";
    tn.NodeKey = "node5";
    tn.NodeValue = myData + "5";
    treeViewEX1.Nodes.Add(tn);

    tn = new TreeViewEX.TreeNode();
    tn.Text = "This is node 6";
    tn.NodeKey = "node6";
    tn.NodeValue = myData + " 6";
    treeViewEX1.Nodes.Add(tn);

    Nota: El código se debe cambiar en Visual Studio 2005. Cuando crea un proyecto de formularios Windows Forms, Visual C# agrega un formulario al proyecto de forma predeterminada y los nombres del formulario Form1. Los dos archivos que lo representan se denominan Form1.cs y Form1.designer.cs. Escriba el código en Form1.cs. El archivo designer.cs es donde el Diseñador de Windows Forms escribe el código que implementa todas las acciones que realizó agregando controles del cuadro de herramientas. Para obtener más información acerca de cómo el Diseñador de Windows Forms en Visual C# 2005, visite el siguiente sitio Web de Microsoft:
  8. Pegue el código siguiente en el evento Click de Button2:
    // Locate the third node using the NodeKey.string myData;
    string nodeInfo;

    foreach (TreeViewEX.TreeNode tn in treeViewEX1.Nodes)
    {
    if (tn.NodeKey == "node6")
    {
    nodeInfo = "Name :" + tn.Text;
    myData = (string)tn.NodeValue;
    nodeInfo += "Data: " + myData;

    MessageBox.Show(nodeInfo, "Node Specific Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    break;
    }
    }

  9. Haga clic en Agregar elementos a TreeViewEX. Esto agrega muestra nodos TreeView y define los valores de los miembros clave y datos.
  10. Haga clic en Buscar el elemento. Después de hacer clic en este botón, un cuadro de mensaje aparece y muestra información sobre el nodo 6 basado en el uso de la propiedad de clave en un bucle foreach .
Propiedades

Id. de artículo: 322937 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios