У меня есть элемент управления Tree View для приложения Windows, в котором используется свойство CheckBoxes.
Иногда (часто), когда узел дерева либо отмечен, либо не отмечен, я получаю исключения переполнения стека в моих статических методах ниже.
Может ли кто-нибудь указать, почему? Может быть, даже покажите мне, как это сделать правильно?
В событии после проверки я написал следующее:
void TreeNode_AfterCheck(object sender, TreeViewEventArgs e) {
if (0 < e.Node.Nodes.Count) {
if (e.Node.Checked) {
e.Node.Expand();
TreeNodes_SetChecksTo(e.Node, true);
} else {
if (!TreeNode_SomethingChecked(e.Node)) {
e.Node.Collapse(false);
}
}
}
}
Как правило, Исключение выдается, когда что-то в статическом методе запускает событие After Check выше и попадает в один из статических методов ниже:
static void TreeNodes_SetChecksTo(TreeNode node, bool value) {
if (node != null) {
if (node.Checked != value) node.Checked = value;
if (0 < node.Nodes.Count) {
foreach (TreeNode sub in node.Nodes) {
TreeNodes_SetChecksTo(sub, value);
}
}
}
}
static bool TreeNode_SomethingChecked(TreeNode node) {
if (node != null) {
if (node.Checked) return true;
if (0 < node.Nodes.Count) {
foreach (TreeNode sub in node.Nodes) {
if (TreeNode_SomethingChecked(sub)) {
return true;
}
}
}
}
return false;
}