左側にディレクトリとファイル ブラウザーの TreeView を作成しました。ユーザーがツリーを参照して、別のツリービューに移動したいファイルとディレクトリを確認できるようにしたいと考えています。
もう 1 つの TreeView は、オンラインで見つけた TreeViewColumn というユーザー コントロールです。そのコントロールを使用して、ユーザーが選択したファイルとフォルダーに他のデータ (カテゴリ、属性) を追加できるようにします。
私が直面している問題は 2 つあります。すべての子を再帰的に追加する必要があります (これは理解できます) が、チェックされていない親をチェックされた子に追加する必要があります (階層を維持するため)。
private void IterateTreeNodes(TreeNode originalNode, TreeNode rootNode)
{
//Take the node passed through and loop through all children
foreach (TreeNode childNode in originalNode.Nodes)
{
// Create a new instance of the node, will need to add it to the recursion as a root item
// AND if checked it needs to get added to the new TreeView.
TreeNode newNode = new TreeNode(childNode.Text);
newNode.Tag = childNode.Tag;
newNode.Name = childNode.Name;
newNode.Checked = childNode.Checked;
if (childNode.Checked)
{
// Now we know this is checked, but what if the parent of this item was NOT checked.
//We need to head back up the tree to find the first parent that exists in the tree and add the hierarchy.
if (tvSelectedItems.TreeView.Nodes.ContainsKey(rootNode.Name)) // Means the parent exist?
{
tvSelectedItems.TreeView.SelectedNode = rootNode;
tvSelectedItems.TreeView.SelectedNode.Nodes.Add(newNode);
}
else
{
AddParents(childNode);
// Find the parent(s) and add them to the tree with their CheckState matching the original node's state
// When all parents have been added, add the current item.
}
}
IterateTreeNodes(childNode, newNode);
}
}
private TreeNode AddParents(TreeNode node)
{
if (node.Parent != null)
{
//tvDirectory.Nodes.Find(node.Name, false);
}
return null;
}
チェックされたノード(およびチェックされた状態に関係なく、その親)を再帰的に追加するように、誰でもこのコードを手伝ってもらえますか。ディレクトリ階層を維持する必要があります。
助けてくれてありがとう!