2012-03-22 3 views
0

그래서 3 개의 부모 노드가있는이 TreeView가 있습니다. 동일한 상위 노드에있는 두 명의 하위 노드에 종속 된 특정 하위 노드가 있습니다. 내가 한 코드는 다음과 같습니다.다른 하나 (TreeView)를 확인한 후 체크 박스를 확인하십시오

private void tvMorgan_AfterCheck(object sender, TreeViewEventArgs e) 
    { 
     if ((e.Node.Text.Contains("BRL/EUR")) && (e.Node.Parent.Text.Contains("FWD"))) 
     { 
      TreeNode tnParent = e.Node.Parent; 
      tnParent.Nodes["BRL/USD"].Checked = true; 
      tnParent.Nodes["EUR/USD"].Checked = true; 
     } 
    } 

내가 실행할 때 확인하고 싶은 두 노드를 찾을 수 없습니다. 미리 감사드립니다.

+0

찾을 수 없다는 의미는 무엇입니까? – gbianchi

+1

if 내부에 중단 점을 설정하면 노드에 찾고자하는 키가 있거나 텍스트에있는 경우에 나타납니다. 또한 코드를 문자열에 덜 의존적으로 만들 수 있습니다. –

+0

아마도 TreeNode.Name 속성을 설정하는 것을 잊었을 것입니다. –

답변

0

주석으로 지적했듯이, 노드의 이름이 누락되었을 가능성이 가장 높습니다. 이 문자열 인덱스 조회에 사용되었습니다. 대부분의 노드가 런타임에 생성되기 때문에 쉽게 발생합니다.

이름을 추가하는 간단한 방법 :

myParent.Nodes.Add(new TreeNode("BRL/USD") { Name = "BRL/USD" }); 
myParent.Nodes.Add(new TreeNode("EUR/USD") { Name = "EUR/USD" }); 

는 그런 다음 코드는 작동합니다 : 당신이에 덜 의존되도록

if (tnParent.Nodes.ContainsKey("EUR/USD")) 
    tnParent.Nodes["EUR/USD"].Checked = true; 

당신은 아마 당신의 if 상태에서 같은 논리를 사용한다 디스플레이 목적으로 만 사용해야하는 텍스트 속성 :

if ((e.Node.Name == "BRL/EUR") ... 

이름을 설정하지 않으면 "텍스트"를 찾으려면 노드 트리를 직접 검색해야합니다.

TreeNode found = tnParent.Nodes.OfType<TreeNode>().Where(x => x.Text.Contains("EUR/USD")).First(); 
if (found != null) 
    found.Checked = true; 
관련 문제