Практическое руководство. Добавление пользовательских данных в элемент управления TreeView или ListView (Windows Forms)

Обновлен: Ноябрь 2007

Разработчик формы может создать производный узел в элементе управления Windows Forms TreeView или производный элемент списка в элементе управления ListView. Образование производных элементов позволяет добавлять любые необходимые поля, а также пользовательские методы и конструкторы для их обработки. Эта возможность применяется, например, для добавления объекта Customer к каждому узлу дерева или элементу списка. Примеры, приведенные в этом разделе, относятся к элементу управления TreeView, но аналогичный подход может использоваться и для элемента управления ListView.

Создание производного узла дерева

  • Создайте новый класс узла, производный от класса TreeNode, в котором предусмотрено пользовательское поле для записи пути к файлу.

    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("\\"));
       }
    };
    

Использование производного узла дерева

  1. Новый производный узел дерева может быть использован как параметр при вызове функции.

    В нижеследующем примере в качестве местоположения текстового файла выбрана папка "Мои документы". Такой выбор объясняется тем, что эта папка имеется на большинстве компьютеров, работающих под управлением операционной системы Windows. Кроме того, если используется эта папка, то для запуска приложения достаточен минимальный уровень доступа к системе.

    ' 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. Если передается узел дерева, тип которого определен как класс TreeNode, то его необходимо привести к типу производного класса. Приведение означает явное преобразование одного типа объекта в другой. Дополнительные сведения о приведении типов см. в разделах Явные и неявные преобразования (Visual Basic), Оператор () (Справочник по C#) (Visual C#) или Cast Operator: () (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));
       }
    

См. также

Другие ресурсы

Элемент управления TreeView (Windows Forms)

Элемент управления ListView (Windows Forms)