Please Enable JavaScript!
Gon[ Enable JavaScript ]

TreeView 노드 Key 속성을 만드는 Visual C# 에서 방법

기타 언어/C# & MFC
반응형

TreeView Node Key 속성과 함께 저장하게 만들어보자. key 를 사용하여 Node

컬렉션에 있는 개체를 쉽게 참조할수 있다. 개체의 순서를 변경할수 있으며 인덱싱할 경우에도

유용하게 사용할수 있다.

 

이것은 IDictionaryEnumerator 인터페이스와 System.Windows.Forms.TreeNode 클래스를 확장하여

사용자 정의 컨트롤 라이브러리를 만든후 참조해서 사용할 것이다.

 

1. TreeView 사용자 정의 컨트롤 만들기

먼저 사용자 정의 컨트롤 프로젝트를 만든다.

프로젝트 탐색이에서 기본으로 만들어진 클래스를 UserControl1.cs TreeViewEx.cs 바꾼다.

기본클래스에 상속된 UserControl System.Windows.Forms.TreeView 로 교체한다.

다음은 이 사용자정의 컨트롤에 TreeNode 클래스를 하나 더 추가한다.

Node 클래스는 IDictionaryEnumerator 인터페이스를 상속받아 컬렉션에서 열거할수 있도록

기능을 추가해서 만든다. TreeView Node 를 추가할 때 지금 정의한 Node 클래스를

사용할 것이다.


public class TreeNode : System.Windows.Forms.TreeNode, IDictionaryEnumerator
{
    private DictionaryEntry nodeEntry;
    private IEnumerator enumerator;

    public TreeNode()
    {
        enumerator = base.Nodes.GetEnumerator();
    }

    public string NodeKey
    {
        get
        {
            return nodeEntry.Key.ToString();
        }

        set
        {
            nodeEntry.Key = value;
        }
    }

    public object NodeValue
    {
        get
        {
            return nodeEntry.Value;
        }

        set
        {
            nodeEntry.Value = value;
        }
    }

    public DictionaryEntry Entry
    {
        get
        {
            return nodeEntry;
        }
    }

    public bool MoveNext()
    {
        bool Success;
        Success = enumerator.MoveNext();
        return Success;
    }

    public object Current
    {
        get
        {
            return enumerator.Current;
        }
    }

    public object Key
    {
        get
        {
            return nodeEntry.Key;
        }
    }

    public object Value
    {
        get
        {
            return nodeEntry.Value;
        }
    }

    public void Reset()
    {
        enumerator.Reset();
    }
}

확장 TreeView 컨트롤이 완성되었으면 빌드하고 이상이 없으면 Tool > Choose Toolbox Items..

선택하자. 그리고 NET Framework Components 탭을 클릭하여 빌드한 TreeViewEx 를 찾아

체크한다.

만약 존재하지 않는다면 아래에 찾기 버튼을 클릭하여 TreeViewEx.dll 을 추가하면 된다.

 

2. TreeView 사용자 정의 컨트롤을 사용한 응용프로그램 만들기

만든 확장 TreeView Toolbox 에 들어가 있을것이다. 새로 만든 응용프로그램에서

추가된 TreeView 를 끌어다 화면에 놓는다.

초기화할 때 아래 코드를 집어넣는다.

TreeViewEX.TreeNode tn;
string myData;

myData = "Extra Information pertaining to Node";

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 1";
tn.NodeKey = "node1";
tn.NodeValue = myData + " 1";
treeViewEX1.Nodes.Add(tn);

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 2";
tn.NodeKey = "node2";
tn.NodeValue = myData + " 2";
treeViewEX1.Nodes.Add(tn);

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 3";
tn.NodeKey = "node3";
tn.NodeValue = myData + " 3";
treeViewEX1.Nodes.Add(tn);

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 4";
tn.NodeKey = "node4";
tn.NodeValue = myData + " 4";
treeViewEX1.Nodes.Add(tn);

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 5";
tn.NodeKey = "node5";
tn.NodeValue = myData + "5";
treeViewEX1.Nodes.Add(tn);

tn = new TreeViewEX.TreeNode();
tn.Text = "This is node 6";
tn.NodeKey = "node6";
tn.NodeValue = myData + " 6";
treeViewEX1.Nodes.Add(tn);

그리고 위에서 TreeView 에 추가한 내용을 찾을 때 예제이다

// Locate the third node using the NodeKey.
string myData;
string nodeInfo;

foreach (TreeViewEX.TreeNode tn in treeViewEX1.Nodes)
{
    if (tn.NodeKey == "node6")
    {
        nodeInfo = "Name :" + tn.Text;
        myData = (string)tn.NodeValue;
        nodeInfo += "Data: " + myData;

        MessageBox.Show(nodeInfo, "Node Specific Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        break;
    }
}

이 예제를 보면 대충 어떻게 돌아가는지 파악할수 있을것이다.

Map 형태의 key, value 로 데이터를 저장, 수정, 찾기, 삭제등을 할수 있는것이다.

반응형
Posted by 녹두장군1
,