왼쪽에 파일 및 디렉토리 브라우저 TreeView를 만들었습니다. 사용자가 트리를 탐색하고 다른 트리 뷰로 이동하려는 파일 및 디렉토리를 확인할 수 있기를 바랍니다.모든 트리 노드를 하나의 트리 뷰에서 다른 트리 뷰로 복사합니다 (체크되지 않은 부모 포함). C#
다른 TreeView는 온라인에서 TreeViewColumn이라는 사용자 정의 컨트롤입니다. 그 컨트롤을 사용하여 사용자가 선택한 파일 및 폴더에 다른 데이터 (범주, 특성)를 추가 할 수 있습니다.
내가 겪고있는 문제는 두 가지입니다. 모든 아이들을 재귀 적으로 추가해야하지만 (체크 아웃 할 수는 있지만) 체크되지 않은 부모를 체크 (상위 계층 유지)해야합니다. 이 재귀 적으로 노드를 확인 (에 관계없이 검사 상태의 부모,)을 추가하도록
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;
}
사람이 코드에 도움이 없습니다. 디렉터리 계층 구조를 유지해야합니다.
도움 주셔서 감사합니다.