我有一个TreeView
,每个项目都有不同的代码
用户可以检查5个项目并保存。然后我有一个treeView的节点代码列表
我想将表单加载中的已检查项目显示给用户。
但是我的代码不起作用。
有人可以帮助我吗?
这是我的代码:
private void chechTreeViewItems(List<int> remID)
{
foreach ( System.Windows.Forms.TreeNode item in this.tvRemark.Nodes)
{
for (int i = 0; i < remID.Count; i++)
{
if (Convert.ToInt16(item.Tag)== remID[i])
{
item.Checked = true;
}
}
}
}
我认为这段代码无法跟踪子节点。
答案 0 :(得分:1)
如果只有一个根节点有多个子节点(只有一个级别),那么这里你不需要递归。只需在foreach循环中正确设置根节点:
private void chechTreeViewItems(List<int> remID)
{
foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes)
{
for (int i = 0; i < remID.Count; i++)
{
if (Convert.ToInt16(item.Tag) == remID[i])
{
item.Checked = true;
}
}
}
}
答案 1 :(得分:0)
做这样的事情:
private void ChechTreeViewItems(List<int> remId)
{
foreach (TreeNode item in this.Nodes)
{
if (remId.Contains(item.Tag))
{
item.IsChecked = true;
}
if (item.Children != null)
{
this.CheckChildTreeNodes(item.Children, remId);
}
}
}
并调用re-cursive CheckChildTreeNodes
方法以确保相应地检查子节点。
private void CheckChildTreeNodes(IEnumerable<TreeNode> childnodes, ICollection<int> remId)
{
if (childnodes==null)
{
return;
}
foreach (TreeNode node in childnodes)
{
if (remId.Contains(node.Tag))
{
node.IsChecked = true;
}
this.CheckChildTreeNodes(node.Children, remId);
}
}
答案 2 :(得分:0)
有了你的帮助我就解决了我的问题。
private void chechTreeViewItems(List<int> remID)
{
for (int i = 0; i < remID.Count; i++)
{
foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes)
{
if (Convert.ToInt16(item.Tag) == remID[i])
{
item.Checked = true;
}
}
}
}