我有一個TreeView
由擁有很多節點的數據庫填充,並且每個節點可能有一些子節點,並且沒有像2個depthes那樣的固定角色,它可能非常深。在TreeView中每次檢查一個節點
想象一下,TreeView
CheckBoxes
是RadioButtons
,我想我的TreeView
只是一次有一個checked節點。我已嘗試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);
}
}
馬赫迪將更好地服務於你,如果你發佈的信息代碼,你目前有在手,涉及到您的問題.. – MethodMan
我認爲你在正確的方向牽制。發佈您的代碼。 – Rafal
請顯示你的'private void node_AfterCheck(object sender,TreeViewEventArgs e)'你需要2個事件,這個我只是突出顯示,還有一個方法Signature就像這樣'private void CheckAllChildNodes(TreeNode treeNode,bool nodeChecked)'來檢查if父節點有ChildNodes.Checked,你需要做一個foreach循環,然後等待你發佈你的代碼。 – MethodMan