将 Check 设置为 treeView 复选框
set Check to treeView checkbox
我有一个 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;
}
}
}
}
我认为这段代码无法跟踪子节点。
做这样的事情:
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);
}
}
}
并调用递归 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);
}
}
如果只有一个根节点有多个子节点(只有一层)那么这里就不需要递归了。只需在 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;
}
}
}
}
在你的帮助下我刚刚解决了我的问题。
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;
}
}
}
}
我有一个 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;
}
}
}
}
我认为这段代码无法跟踪子节点。
做这样的事情:
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);
}
}
}
并调用递归 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);
}
}
如果只有一个根节点有多个子节点(只有一层)那么这里就不需要递归了。只需在 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;
}
}
}
}
在你的帮助下我刚刚解决了我的问题。
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;
}
}
}
}