2012-07-30 1 views
0

: 나는 시도TreeNode에서 상속받을 때 TreeView 컨트롤에서 노드를 만들기 위해 어떤 필드 나 함수를 재정의해야합니까? 내가 트 리뷰에 자신의 노드를 추가 할 TreeNode를 상속하는 것을 시도하고있다

class TreeViewItem : TreeNode 
{ 
    public new string Text; 

    public override string ToString() 
    { 
     return "asd"; 
    } 
} 

그 :

TreeViewItem tvi = new TreeViewItem(); 
    tvi.Text = "asd"; 
    trv_bd_content.Nodes.Add(tvi); 

하지만 여전히 트 리뷰에 추가 빈 노드지고 (텍스트 "ASD"없이 노드) .
어떻게해야합니까?

+0

예, 작동하지 않습니다. TreeView 클래스는 여전히 원래 Text 속성을 사용하지만 새 Text 필드에 대해서는 알지 못합니다. Text 속성을 사용해야합니다. –

+0

클래스 내부의 코드 만 제거하면 모든 것이 작동합니다. 새 클래스에서 어떤 행동을 재정의 (수정)합니까? –

+0

나는 coords와 함께 몇 가지 개체가 있고 TreeView에 추가 할 때 그것을 만들고 싶다 : 공개 문자열 새 텍스트 {get : 반환 이름 + ":"+ 위도 + "/"+ 경도 + "/"+ "H ; } – Kosmos

답변

2

독자가 직접 작성한 텍스트를 표시하기 위해 TreeNode을 재정의 할 것임을 알고 있습니다. 계산에 필요한 값이 트리에 노드를 추가하기 전에 알려진 경우 내가이 방법을 수행하는 제안 :

 treeView = new TreeView(); 
     var node = new TreeNode(
      string.Format("{0}: {1}/{2}/{3}", name, latitude, longitude, H)); 
     treeView.Nodes.Add(node); 

그것은 좋은 생각이 아니다 단지 추가 데이터를 유지하기 위해 시각적 요소를 재정의. 일반적으로 시각적 요소를 재정의하여 도면 또는 시각적 요소와 관련된 동작을 수정합니다.

해당 데이터를 유지하려면 Tag 속성을 사용할 수 있습니다. 여기에는 데이터를 저장할 수 있습니다 (형식이 지정되지 않음). 따라서 데이터가 포함 된 클래스의 인스턴스를 넣을 수 있습니다.

+0

이것은 내가 원하는 것이 아닌 것입니다. TreeNode 대신 TreeView에 추가 된 ** TreeViewItem **이 있어야합니다. ** TreeViewItem ** 내 모든 필요한 필드에 쉽게 액세스 할 수 있도록하려면 TreeView에서 선택한 항목 만 알고 있어야합니다. 내가 TreeView TreeNodes에 저장하면 다른 클래스의 모든 인스턴스를 검색하여 TreeView에서 선택된 TreeNode의 개체 수학 인스턴스를 찾습니다. – Kosmos

+0

제 편집을 참조하십시오. –

+0

태그를 사용하는 것이 좋습니다. 고마워, 나는이 일에 대해 몰랐다. – Kosmos

1

treenode는 표시 정보를 얻기 위해 ToString()을 사용하지 않습니다. 대신 .Text 속성을 사용합니다 (오버 라이딩되는 것을 좋아하지 않는 것 같습니다)

원하는 경우 생성자에서 Text 속성을 설정할 수 있습니다.

class TreeViewItem : TreeNode 
{ 
    // public new string Text; Remove this so you don't call it 

    public TreeViewItem(){ 
     this.Text = "asd"; 
    } 

    //Treeview doesn't seem to use this 
    public override string ToString() 
    { 
     return "asd"; 
    } 
}