【发布时间】:2013-01-12 08:54:43
【问题描述】:
我有一个从数据库填充的TreeView 有很多节点,每个节点可能有一些子节点,并且没有像 2 深度这样的固定角色,它可能非常深。
假设TreeView CheckBoxes 是RadioButtons,我希望我的TreeView 一次只检查一个节点。我尝试了AfterCheck 和BeforeCheck 事件,但它们陷入了永远循环,我该怎么办?
我想保持我选中的节点 CHECKED 并取消选中所有其他节点,但我不能。等待你的聪明点。谢谢。
这是我尝试过但以StackOverFlow 异常结束的代码,我想也许是说去StackOverflow 上检查一下:D
private void tvDepartments_AfterCheck(object sender, TreeViewEventArgs)
{
List<TreeNode> nodes = new List<TreeNode>();
if (rdSubDepartments.Checked)
CheckSubNodes(e.Node, e.Node.Checked);
else if (rdSingleDepartment.Checked)
{
foreach (TreeNode node in tvDepartments.Nodes)
{
if (node != e.Node)
node.Checked = false;
}
}
}
public void CheckSubNodes(TreeNode root, bool checkState)
{
foreach (TreeNode node in root.Nodes)
{
node.Checked = checkState;
if (node.Nodes.Count > 0)
CheckSubNodes(node, checkState);
}
}
【问题讨论】:
-
Mahdi 如果您发布您当前拥有的与您手头的问题相关的代码,它会更好地为您服务..
-
我认为你的方向是正确的。发布您的代码。
-
请显示您的
private void node_AfterCheck(object sender, TreeViewEventArgs e),您需要 2 个事件,我刚刚突出显示的一个,一个具有类似private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)的方法签名的事件,还检查父节点是否有 ChildNodes。检查您需要做一个foreach{ } 循环仍在等待您发布代码.. -
好的伙计们,等一下,我会发布代码。
-
@DJKRAZE 我用代码更新了我的问题。
标签: c# winforms treeview treenode oncheckedchanged