[재귀함수를 사용한 트리뷰(TreeView)]
1. Address_Box | TextBox | 8. Btn_FirstChild | Buttion |
2. Btn_Search | Button | 9. Btn_LastChild | Buttion |
3. Btn_Expand | Button | 10. ListBox1 | ListBox |
4. Btn_Collapse | Button | 11. Btn_BeforeChild | Buttion |
5. TreeView1 | TreeView | 12. Btn_NextChild | Buttion |
6. Parent_Box | TextBox | 13. Btn_Remove | Buttion |
7. Child_Box | TextBox |
① 폴더 경로 찾아서 트리구조로 뿌려주기
1-1. Btn_Search 버튼 Click 이벤트
private void Btn_Search_Click(object sender, EventArgs e)
{
Address_Box.Clear();
ShowFolderopenDialog();
}
1-2. 폴더 경로 찾기
public void ShowFolderopenDialog()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
Address_Box.Text = fbd.SelectedPath;
}
}
1-3. 폴더 경로 가져오기
// 폴더 경로 가져오기 메소드
private void TreeViewLoadPath(TreeView treeView, string path)
{
if (string.IsNullOrEmpty(Address_Box.Text))
{
return;
}
treeView.Nodes.Clear();
DirectoryInfo rootDirectoryInfo = new DirectoryInfo(path);
treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
}
// 폴더 경로 가져오기 메소드(재귀함수)
private TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
TreeNode directoryNode = new TreeNode(directoryInfo.Name);
try
{
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Nodes.Add(CreateDirectoryNode(directory));
}
catch (Exception)
{
}
return directoryNode;
}
1-4. 폴더 경로 트리구조로 뿌려주기
private void Address_Box_TextChanged(object sender, EventArgs e)
{
TreeViewLoadPath(TreeView1, Address_Box.Text);
}
② 트리구조 펼치기/접기
private void Btn_Collapse_Click(object sender, EventArgs e)
{
TreeView1.CollapseAll();
}
private void Btn_Expand_Click(object sender, EventArgs e)
{
TreeView1.ExpandAll();
}
③ 첫번째 자식/마지막 자식 추가하기
3-1. 트리뷰의 노드 선택 이벤트
private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
ListBox1.Items.Clear();
TreeNode node = TreeView1.SelectedNode;
if (node == null)
{
ParentBox.Text = string.Empty;
ParentBox.Tag = TreeView1.TopNode;
Btn_Remove.Enabled = false;
return;
}
ParentBox.Text = node.Text;
ParentBox.Tag = node;
Btn_Remove.Enabled = true;
foreach (TreeNode snode in node.Nodes)
{
ListBox1.Items.Add(snode);
}
}
3-2. 첫번째 자식/마지막 자식 추가하기
private void Btn_FirstChild_Click(object sender, EventArgs e)
{
TreeNode node = ParentBox.Tag as TreeNode;
if (node == null)
{
TreeView1.Nodes.Insert(0, ChildBox.Text);
}
else
{
node.Nodes.Insert(0, ChildBox.Text);
node.Expand();
}
ChildBox.Text = string.Empty;
}
private void Btn_LastChild_Click(object sender, EventArgs e)
{
TreeNode node = ParentBox.Tag as TreeNode;
if (node == null)
{
TreeView1.Nodes.Add(ChildBox.Text);
}
else
{
node.Nodes.Add(ChildBox.Text);
node.Expand();
}
ChildBox.Text = string.Empty;
}
④ 이전 자식/다음 자식 추가하기
4-1. 노드 목록 선택 이벤트
private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
bool selected = (ListBox1.SelectedIndex != -1);
Btn_BeforeChild.Enabled = selected;
Btn_NextChild.Enabled = selected;
}
4-2. 이전 자식/다음 자식 추가하기
private void Btn_BeforeChild_Click(object sender, EventArgs e)
{
TreeNode tn = ListBox1.SelectedItem as TreeNode;
TreeNode pn = tn.Parent;
pn.Nodes.Insert(tn.Index, ChildBox.Text);
ChildBox.Text = string.Empty;
}
private void Btn_NextChild_Click(object sender, EventArgs e)
{
TreeNode tn = ListBox1.SelectedItem as TreeNode;
TreeNode pn = tn.Parent;
pn.Nodes.Insert(tn.Index + 1, ChildBox.Text);
ChildBox.Text = string.Empty;
}
⑤ 선택한 노드가 있으면 삭제하기
private void Btn_Remove_Click(object sender, EventArgs e)
{
TreeView1.SelectedNode.Remove();
ParentBox.Tag = null;
ParentBox.Text = string.Empty;
}
'기타 > 과제' 카테고리의 다른 글
컨트롤 바인딩(예제) (0) | 2020.12.02 |
---|---|
재귀 함수 호출 트리(개념) (0) | 2020.11.18 |
카카오챗봇 : 오픈빌더 도움말 (0) | 2020.11.16 |
IBS 상품관리 (0) | 2020.11.13 |