TreeView
(trvP)にいくつかのノードが追加されています。ルート要素はTag
プロパティがRoot
に設定されています。すべてのノードをツリービューでステータスをチェックしようとしました - get StackOverflowException
私はルート要素をチェックすると、他のすべてのノードが同じステータスになるようにしています。ただし、以下のコードを実行するとStackOverflowException
になります。
private void trvP_AfterCheck(object sender, TreeViewEventArgs e)
{
if(e.Node.Tag.Equals("Root"))
{
var nodes = TreeViewExtensions.GetAllNodes(e.Node.TreeView);
foreach (TreeNode node in nodes)
node.Checked = e.Node.Checked;
}
}
GetAllNodes
関数のコード:それだけforeach
ループ(ルートノード)の内部に単一のノードを設定して、それは、何度もコードのvar nodes = ...
一部を実行することをデバッグから思わ
public static List<TreeNode> GetAllNodes(this TreeView _trv)
{
List<TreeNode> result = new List<TreeNode>();
foreach (TreeNode child in _trv.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
public static List<TreeNode> GetAllNodes(this TreeNode _trn)
{
List<TreeNode> result = new List<TreeNode>();
result.Add(_trn);
foreach (TreeNode child in _trn.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
。しかし、nodes
は正しい値を持つノードの適切なリストです。
なぜこれが何度も繰り返し実行されているかわかりませんが、例外が発生します。
のように書くことができますが、 'TreeNode'(あなたが唯一の' TreeView'のための1つを表示する)ための 'GetAllNodes()'拡張子を表示することができますか? –
そして、私はルートノードがあなたのリストの最初になるだろうと思うので、 'node.Checked = ...'は同じノードのために再び 'trvP_AfterCheck()'ハンドラを呼び出します(チェックステートが変化する)。 –
追加されましたが、以下に述べるように、いくつかのランダムな子要素(子もあります)を呼び出すと、 'GetAllNodes'は正常に動作します。 – Janushoff