У меня есть TreeView
, заполненный из базы данных с большим количеством узлов, и у каждого узла может быть несколько дочерних элементов, и нет фиксированной роли, такой как 2 глубины, она может быть очень глубокой.
Представьте, что TreeView
CheckBoxes
это RadioButtons
, я хочу, чтобы мой TreeView
проверял только один узел за раз. Я пробовал события AfterCheck
и BeforeCheck
, но они попадают в бесконечный цикл, что мне делать?
Я хочу оставить свой проверенный узел ПРОВЕРЕННЫМ и снять все остальные узлы, но я не могу. Жду ваших умных очков. Спасибо.
Вот код, который я попробовал, но в итоге получил исключение 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);
}
}
private void node_AfterCheck(object sender, TreeViewEventArgs e)
, вам нужны 2 события, это одно, которое я только что выделил, и одно, у которого есть метод Signature, подобный этомуprivate void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
также, чтобы проверить, есть ли у родительского узла дочерние узлы. Проверено, вам нужно выполнить цикл foreach { }, все еще ожидающий, пока вы опубликуете свой код .. - person MethodMan   schedule 12.01.2013