如何使用c#4.0在TreeView中获取所有选中的复选框节点名称?
在基于C#Windows表单的应用程序中,我有一个带有复选框的树状视图。用户通过单击节点中的复选框来选择项目。现在,每当用户单击getselectedlist按钮时,我都希望获得选中的复选框节点名称。我是如何做到的如何使用c#4.0在TreeView中获取所有选中的复选框节点名称?,c#,.net,treeview,C#,.net,Treeview,在基于C#Windows表单的应用程序中,我有一个带有复选框的树状视图。用户通过单击节点中的复选框来选择项目。现在,每当用户单击getselectedlist按钮时,我都希望获得选中的复选框节点名称。我是如何做到的 请引导我摆脱这个问题…在按钮单击事件中,您可以重复整个树,如中所述。然后,对于每个树节点,您可以检查复选框是否选中,如果选中,您可以将其名称添加到列表中。您可以使用简单的递归函数: List<String> CheckedNames( System.Windows.For
请引导我摆脱这个问题…在按钮单击事件中,您可以重复整个树,如中所述。然后,对于每个树节点,您可以检查复选框是否选中,如果选中,您可以将其名称添加到列表中。您可以使用简单的递归函数:
List<String> CheckedNames( System.Windows.Forms.TreeNodeCollection theNodes)
{
List<String> aResult = new List<String>();
if ( theNodes != null )
{
foreach ( System.Windows.Forms.TreeNode aNode in theNodes )
{
if ( aNode.Checked )
{
aResult.Add( aNode.Text );
}
aResult.AddRange( CheckedNames( aNode.Nodes ) );
}
}
return aResult;
}
列出选中的名称(System.Windows.Forms.TreeNodeCollection节点)
{
List aResult=新列表();
if(theNodes!=null)
{
foreach(节点中的System.Windows.Forms.TreeNode阳极)
{
如果(阳极检查)
{
aResult.Add(阳极.文本);
}
aResult.AddRange(选中的名称(阳极节点));
}
}
返回结果;
}
只需在您的TreeView.Nodes上使用它,而不是在每次检查某个项目时递归地遍历TreeView中的每个节点,这可能会变得很昂贵,就像我一样,您的列表中有数百或数千个项目,但检查的项目不超过20个 我在选中/取消选中后从字符串列表中添加/删除,因为我只需要完整路径字符串,但是如果需要的话,您也可以用同样的方式使用TreeNode集合
public partial class Form1 : Form
{
List<String> CheckedNodes = new List<String>();
public Form1()
{
InitializeComponent();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Checked)
{
CheckedNodes.Add(e.Node.FullPath.ToString());
}
else
{
CheckedNodes.Remove(e.Node.FullPath.ToString());
}
}
}
公共部分类表单1:表单
{
List CheckedNodes=新列表();
公共表格1()
{
初始化组件();
}
私有无效树视图1_检查后(对象发送方,树视图目标e)
{
如果(e.节点已选中)
{
添加(例如Node.FullPath.ToString());
}
其他的
{
CheckedNodes.Remove(例如Node.FullPath.ToString());
}
}
}
//简单可靠的方法
列表_valueList=新列表();
私有列表getCheckedNodes(TreeNodeCollection\u parentNodeList)
{
foreach(父节点列表中的树节点项)
{
如果(选中项)
{
_valueList.Add(转换为32(item.Value));
}
如果(item.ChildNodes.Count>0)
{
//NET不会忘记它在哪里停留过。
getCheckedNodes(item.ChildNodes);
}
}
返回(u)价值清单;;
}
但是aResult.AddRange(选中的名称(阳极节点))代码>-是一个子迭代
//Uncomplicated, reliable method
List<int> _valueList = new List<int>();
private List<int> getCheckedNodes(TreeNodeCollection _parentNodeList)
{
foreach (TreeNode item in _parentNodeList)
{
if (item.Checked)
{
_valueList.Add(Convert.ToInt32(item.Value));
}
if (item.ChildNodes.Count > 0)
{
//.NET does not forget where it stayed.
getCheckedNodes(item.ChildNodes);
}
}
return _valueList;
}