在C#中,使用WinForms或WPF中的TreeView控件可以實(shí)現(xiàn)動(dòng)態(tài)加載。這里分別給出兩種方法的示例:
首先,在WinForms中創(chuàng)建一個(gè)TreeView控件和一個(gè)ImageList控件。將ImageList與TreeView關(guān)聯(lián),并設(shè)置其圖像列表。
// 在WinForms設(shè)計(jì)器中添加TreeView控件和ImageList控件
private TreeView treeView;
private ImageList imageList;
// 在構(gòu)造函數(shù)或窗體的Load事件處理程序中初始化組件
public Form1()
{
InitializeComponent();
// 初始化TreeView和ImageList
treeView = new TreeView();
imageList = new ImageList();
// 設(shè)置ImageList的圖像資源
imageList.Images.Add("folder", Properties.Resources.folder_icon);
imageList.Images.Add("file", Properties.Resources.file_icon);
// 將ImageList與TreeView關(guān)聯(lián)
treeView.ImageList = imageList;
// 設(shè)置TreeView的屬性
treeView.Dock = DockStyle.Fill;
treeView.AllowNodeEditing = false;
treeView.ShowLines = true;
treeView.AutoScroll = true;
// 將TreeView添加到窗體中
this.Controls.Add(treeView);
}
接下來(lái),為TreeView控件添加一個(gè)事件處理程序,以便在展開節(jié)點(diǎn)時(shí)動(dòng)態(tài)加載子節(jié)點(diǎn)。
// 為TreeView控件添加NodeMouseClick事件處理程序
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode node = e.Node;
contextMenuStrip1.Show(treeView, e.Location);
}
}
現(xiàn)在,為TreeView控件添加一個(gè)方法,用于動(dòng)態(tài)加載子節(jié)點(diǎn)。
// 動(dòng)態(tài)加載子節(jié)點(diǎn)的方法
private void LoadChildNodes(TreeNode parentNode)
{
// 清除現(xiàn)有子節(jié)點(diǎn)
parentNode.Nodes.Clear();
// 模擬從數(shù)據(jù)源獲取子節(jié)點(diǎn)數(shù)據(jù)
List<string> childNodes = GetChildNodesFromDataSource(parentNode.Text);
// 添加子節(jié)點(diǎn)
foreach (string childNodeText in childNodes)
{
TreeNode childNode = new TreeNode(childNodeText);
childNode.ImageIndex = 0; // 使用文件夾圖像
childNode.SelectedImageIndex = 0;
parentNode.Nodes.Add(childNode);
}
}
// 模擬從數(shù)據(jù)源獲取子節(jié)點(diǎn)數(shù)據(jù)的方法
private List<string> GetChildNodesFromDataSource(string parentNodeText)
{
// 在這里實(shí)現(xiàn)從數(shù)據(jù)源獲取子節(jié)點(diǎn)的邏輯
// 例如,從數(shù)據(jù)庫(kù)或XML文件中讀取子節(jié)點(diǎn)數(shù)據(jù)
List<string> childNodes = new List<string>();
childNodes.Add("Child Node 1");
childNodes.Add("Child Node 2");
childNodes.Add("Child Node 3");
return childNodes;
}
最后,為TreeView控件的KeyDown事件處理程序添加代碼,以便在按下Enter鍵時(shí)加載子節(jié)點(diǎn)。
// 為TreeView控件添加KeyDown事件處理程序
private void treeView_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
TreeNode selectedNode = treeView.SelectedNode;
if (selectedNode != null)
{
LoadChildNodes(selectedNode);
}
}
}
現(xiàn)在,當(dāng)用戶展開TreeView節(jié)點(diǎn)時(shí),將自動(dòng)加載子節(jié)點(diǎn)。
首先,在WPF中創(chuàng)建一個(gè)TreeView控件和一個(gè)ImageList控件。將ImageList與TreeView關(guān)聯(lián),并設(shè)置其圖像列表。
<!-- 在WPF設(shè)計(jì)器中添加TreeView控件和ImageList控件 -->
<Window.Resources>
<local:ImageConverter x:Key="ImageConverter"/>
</Window.Resources>
<Grid>
<TreeView x:Name="treeView" ItemsSource="{Binding TreeData}" SelectedValuePath="Key">
<TreeView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Value.Icon}" Width="16" Height="16" Margin="0,0,5,0" VerticalAlignment="Center"/>
<TextBlock Text="{Binding Key}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
接下來(lái),為TreeView控件添加一個(gè)方法,用于動(dòng)態(tài)加載子節(jié)點(diǎn)。
// 動(dòng)態(tài)加載子節(jié)點(diǎn)的方法
private void LoadChildNodes(TreeNode parentNode)
{
// 清除現(xiàn)有子節(jié)點(diǎn)
parentNode.Items.Clear();
// 模擬從數(shù)據(jù)源獲取子節(jié)點(diǎn)數(shù)據(jù)
List<KeyValuePair<string, object>> childNodes = GetChildNodesFromDataSource(parentNode.Header.ToString());
// 添加子節(jié)點(diǎn)
foreach (KeyValuePair<string, object> childNode in childNodes)
{
TreeNode newChildNode = new TreeNode(childNode.Key);
newChildNode.Header = childNode.Value;
parentNode.Items.Add(newChildNode);
}
}
// 模擬從數(shù)據(jù)源獲取子節(jié)點(diǎn)數(shù)據(jù)的方法
private List<KeyValuePair<string, object>> GetChildNodesFromDataSource(string parentNodeText)
{
// 在這里實(shí)現(xiàn)從數(shù)據(jù)源獲取子節(jié)點(diǎn)的邏輯
// 例如,從數(shù)據(jù)庫(kù)或XML文件中讀取子節(jié)點(diǎn)數(shù)據(jù)
List<KeyValuePair<string, object>> childNodes = new List<KeyValuePair<string, object>>();
childNodes.Add(new KeyValuePair<string, object>("Child Node 1", null));
childNodes.Add(new KeyValuePair<string, object>("Child Node 2", null));
childNodes.Add(new KeyValuePair<string, object>("Child Node 3", null));
return childNodes;
}
最后,為TreeView控件的SelectedItemChanged事件處理程序添加代碼,以便在選中節(jié)點(diǎn)時(shí)加載子節(jié)點(diǎn)。
// 為TreeView控件添加SelectedItemChanged事件處理程序
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeNode selectedNode = treeView.SelectedItem as TreeNode;
if (selectedNode != null)
{
LoadChildNodes(selectedNode);
}
}
現(xiàn)在,當(dāng)用戶展開TreeView節(jié)點(diǎn)時(shí),將自動(dòng)加載子節(jié)點(diǎn)。