2013-02-19 2 views
2

생성 된 노드가있는 populated treeView가 있습니다. 여러 노드 클래스가 있으며, 모두 treeNode에서 상속됩니다.TreeView의 선택된 노드를 새로 생성 된 노드로 대체하는 방법

GUI 대화 상자를 사용하여 노드를 편집하면 다른 클래스로 변경 될 수 있으므로 해당 프로세스에서 새 노드를 만들고 선택한 노드를 새 노드로 바꾸려고합니다. 작동하지 않으면, 노드는 오래된 것을 유지하고, 내가 잘못하고있는 것을 파악할 수 없습니다.

코드 :

TreeNodeMission mission = (TreeNodeMission)treeView.SelectedNode; 
TreeNodeMission newMission = ChangeMissionDialog(mission); 

treeView.SelectedNode = newMission; // doesn't work 

는 또한 그것을 제거하고 추가하는 시도는, 또한 내가 무슨 일을하고있는 중이 야

index = treeView.Nodes.IndexOf(treeView.SelectedNode); // index returns -1 
treeView.Nodes.Remove(treeView.SelectedNode); 
treeView.Nodes.Insert(index, newMission); 

작동하지 않는 이유는 무엇입니까?

업데이트 : treeView.SelectedNode가 null이 아니며 유효한 노드를 선택했습니다.

+0

당신은 확인 SelectedNode가 null이 아닙니까? –

+0

'index'가'-1'을 반환하면, 노드가 선택되지 않았 음을 나타냅니다. 그러므로 관련된 모든 코드는 작동하지 않습니다. –

+0

어떤 종류의 응용 프로그램입니까? WPF 또는 Winforms 또는 다른 뭔가? WPF 인 경우 SelectedNode에 알리는 중입니까? –

답변

0

해결 된 버그입니다.

노드를 제거하고 다시 추가하여 노드를 교체 할 수있는 방법을 발견했습니다. 나는 나무 나에게 일반적으로 인덱스를 줄 것이다 인덱스를 요구 생각 생각하지만, 그렇게 부모 노드를 사용하여, 단지 부모에 인덱스를 제공, 나는 그것을 대체 할 수

int index = treeView.SelectedNode.Index; 
treeView.SelectedNode.Parent.Nodes.RemoveAt(index); 
treeView.SelectedNode.Parent.Nodes.Insert(index, mission); 
treeView.SelectedNode = mission; 

감사

관련 문제