C# 윈폼(TreeView, ListView)
1. Form의 속성(F4)중 Text속성을 “TreeView&ListView TEST”, Name속성을 “FrmMain”으로…
2. 아래와 같이 버튼 컨트롤을 배치하자.(툴 박스가 안 보인다면 View > Toolbox를 클릭)
- GroupBox(Text: TreeView & ListView)
- TreeView(Name : trv1), ListView(Name : lstv1, View : Details),
- Button(Name : addRoot, Text : 루트추가), Button(Name : addChild, Text : 자식추가)
3. Form1.cs 파일을 코드 편집기로 열어 아래 내용을 추가하자.
public partial class FrmMain : Form
{
Random r = new Random(37);
public FrmMain()
{
InitializeComponent();
}
}
4. FrmMain의 생성자에 아래 코드를 추가하자.
public FrmMain()
{
InitializeComponent();
lstv1.Columns.Add("Name");
lstv1.Columns.Add("Depth");
}
5. Form1.cs 파일을 코드 편집기로 열어 아래 내용을 추가하자.
void TreeToList()
{
lstv1.Items.Clear();
foreach (TreeNode node in trv1.Nodes)
{
TreeToList(node);
}
}
void TreeToList(TreeNode node)
{
//TreeNode 형식의 FullPath 속성은 루트노드에서 현재노드까지의 경로를 나타내며
//각 경로는 \로 구분한다.
lstv1.Items.Add(
new ListViewItem(
new string[] { node.Text,
node.FullPath.Count(f => f == '\\').ToString() }));
foreach (TreeNode n in node.Nodes)
{
TreeToList(n);
}
}
6. 이번에는 버튼 클릭 이벤트 처리용 메소드를 만들자.
private void addRoot_Click(object sender, EventArgs e)
{
trv1.Nodes.Add(r.Next().ToString());
TreeToList();
}
private void addChild_Click(object sender, EventArgs e)
{
if (trv1.SelectedNode == null)
{
MessageBox.Show("선태된 노드 없음.", "트리뷰테스트",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
trv1.SelectedNode.Nodes.Add(r.Next().ToString());
trv1.SelectedNode.Expand();
TreeToList();
}