在C#中,要實現TreeNode的動態加載,通常需要以下幾個步驟:
以下是一個簡單的示例代碼,展示了如何在TreeView控件中實現TreeNode的動態加載:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
public class CustomTreeNode : TreeNode
{
public object Data { get; set; }
public CustomTreeNode(object data) : base(data.ToString())
{
this.Data = data;
}
}
public class DynamicTree : Form
{
private TreeView treeView;
public DynamicTree()
{
treeView = new TreeView
{
Dock = DockStyle.Fill
};
treeView.SelectedItemChanged += TreeView_SelectedItemChanged;
this.Controls.Add(treeView);
// 添加根節點
var rootNode = new CustomTreeNode("Root");
treeView.Nodes.Add(rootNode);
}
private void TreeView_SelectedItemChanged(object sender, EventArgs e)
{
var selectedNode = treeView.SelectedNode;
if (selectedNode != null)
{
LoadChildNodes(selectedNode);
}
}
private void LoadChildNodes(CustomTreeNode parentNode)
{
// 清空現有子節點
parentNode.Nodes.Clear();
// 獲取子節點數據(這里可以是異步操作)
var childNodesData = GetChildNodesData(parentNode.Data);
// 動態添加子節點
foreach (var data in childNodesData)
{
var childNode = new CustomTreeNode(data);
parentNode.Nodes.Add(childNode);
}
}
private List<object> GetChildNodesData(object parentNodeData)
{
// 這里可以根據實際數據源獲取子節點數據
// 示例中僅返回固定數量的子節點數據
var childNodesData = new List<object>();
for (int i = 0; i < 5; i++)
{
childNodesData.Add($"Child Node {i}");
}
return childNodesData;
}
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new DynamicTree());
}
}
在這個示例中,我們創建了一個名為CustomTreeNode的自定義TreeNode類,并在TreeView控件中添加了一個事件處理程序來處理SelectedItemChanged事件。當用戶選擇一個不同的節點時,LoadChildNodes方法會被調用,該方法會清空現有子節點并動態加載新的子節點數據。GetChildNodesData方法用于獲取子節點數據,這里僅返回固定數量的子節點數據作為示例。在實際應用中,您可能需要根據實際數據源來獲取子節點數據,這可能涉及到異步操作。