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 로 데이터를 저장, 수정, 찾기, 삭제등을 할수 있는것이다.
'기타 언어 > C# & MFC' 카테고리의 다른 글
C# Transaction 처리를 위한 예제 (1) | 2010.07.22 |
---|---|
원하는 프로그램의 핸들 얻기 (3) | 2009.11.02 |
WebBrowser 컨트롤의 HTML 코드에서 DOM 객체처럼 특정 태그 내용을 추출 (4) | 2009.11.01 |
컴퓨터 종료 프로그램 (0) | 2009.09.22 |
C# 프로그램에서 외부 브라우저로 사이트 이동시키기 (6) | 2009.09.18 |
C# 리소스 관리하기 (2) | 2009.09.16 |
ListView 에서 행간간격을 조절하여 가독성을 높여보자 (0) | 2009.09.12 |
에러 - Unable to find manifest signing certificate in the certificate store (1) | 2009.09.10 |