我在c#中有一个带有树视图的Windows应用程序。现在我要检查该树视图的所有节点,包括节点的节点。 我试过这段代码:
for (int i = 0; i < treevwaccess.Nodes.Count; i++)
{
formid = treevwaccess.Nodes[i].Name;
access = treevwaccess.Nodes[i].Checked;
user.updateaccesslevel(lblId.Text, formid, access);
}
但此代码仅检查级别0中的节点
答案 0 :(得分:0)
你必须使用Stack
或这样的递归方法:
DoStuff(treevwaccess.Nodes);
...
void DoStuff(TreeNodeCollection nodes)
{
foreach(TreeNode node in nodes)
{
user.updateaccesslevel(lblId.Text, node.Name, node.Checked);
DoStuff(node.Nodes);
}
}
答案 1 :(得分:0)
你需要像这样创建和调用递归函数
static void main()
{
var treevwaccess = new System.Windows.Forms.TreeView();
CheckAll(treevwaccess.Nodes);
}
static void CheckAll(System.Windows.Forms.TreeNodeCollection nodes )
{
foreach (System.Windows.Forms.TreeNode node in nodes)
{
var formid = node.Name;
var access = node.Checked;
user.updateaccesslevel(lblId.Text, formid, access);
CheckAll(node.Nodes);
}
}
答案 2 :(得分:0)
您还必须检查根节点的子节点。
为此请尝试此代码。
for (int i = 0; i < treevwaccess.Nodes.Count; i++)
{
formid = treevwaccess.Nodes[i].Name;
access = treevwaccess.Nodes[i].Checked;
user.updateaccesslevel(lblId.Text, formid, access);
CheckChildNodes(treevwaccess.Nodes[i]);
}
void CheckChildNodes(TreeNode node)
{
if (node.Nodes.Count > 0)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
formid = node.Nodes[i].Name;
access = node.Nodes[i].Checked;
user.updateaccesslevel(lblId.Text, formid, access);
}
}
}
这会对你有帮助。