PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net |TreeView

TreeView로 간단한 폴더및 화일탐색기 만들어 보기

System.IO.DirectoryInfo

TreeView를 사용하면 항상 폴더와 화일을 탐색하는 도구를
만들어 보는 것이 좋은 예제가 된다
폴더와 화일에 대한 정보를 찾는 것은 VBA에서는 VBA.IO 함수들을 사용하였었었고
또 외부라이브러리인 FileSystemObject를 사용하기도 했었다
또 다른 방법도 많지만 대표적인 것은
.NetFrameWork에서 제공하는 기본 System.IO 네임스페이스의 개체를 사용하는 것
아래와 같이 하면..


'' TreeView의 이벤트를 사용하기 위하여 WithEvents 로 전역변수로 선언하고
WithEvents oTV As TreeView
''시작하는 드라이브명은 아래와 같이 하고
Dim RootPath As String = "C:\"
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

	oTV = New TreeView
	Me.Controls.Add(oTV)
	oTV.Left = 6
	oTV.Top = 6

	oTV.Width = 500
	oTV.Height = 400
	Me.AutoSize = True
	Me.Font = New Font("맑은 고딕", 9)
''최초 하나의 TreeNode를 붙이고
''이것은 전역변수에서 선언한 사용할 드라이브명으로 하고
	Dim oNode As New TreeNode
	oNode.Text = RootPath
	oNode.Tag = RootPath
''자식 TreeNode가 없으면 +표시가 나타나지 않는다
''그래서 빈 가짜 TreeNode를 자식으로 하나 붙여 놓는다	
	oNode.Nodes.Add("*BLANK*")
	oTV.Nodes.Add(oNode)

End Sub

''TreeNode의 아이콘이 - 표시일때 크릭하면 발생하는 TreeView의 BeforeCollapse 이벤트프로시져
Private Sub oTV_BeforeCollapse(sender As Object, e As System.Windows.Forms.TreeViewCancelEventArgs) Handles oTV.BeforeCollapse
	' 축소가 될때 해당 Node의 자식을 모두 지운다
	e.Node.Nodes.Clear()
	' 하지만, 다음 단계에 자식노드가 하나도 없으면 확장표시가 나타나지 않는다
	' 그래서 빈 Node를 하나 추가한다
	e.Node.Nodes.Add("*BLANK*")
End Sub
''TreeNode의 아이콘이 + 표시일때 크릭하면 발생하는 TreeView의 BeforeExpand 이벤트프로시져
Private Sub oTV_BeforeExpand(sender As Object, e As System.Windows.Forms.TreeViewCancelEventArgs) Handles oTV.BeforeExpand
	'' 접근허용안되는 폴더에서 에러가 나더라도 통과하기 위하여
	'' Try ~Catch 문으로 잡아주고..
	Try
		' TreeNode의 +표시를 눌러서 다음 단계로 확장할때
		' 임시 TreeNode를 없애고
		e.Node.Nodes.Clear()
		' 해당 노드의 자식 폴더를 읽는다
		' 해당 TreeNode의 Tag 속성값이 현재의 폴더
		Dim oDirectory As System.IO.DirectoryInfo
		oDirectory = New System.IO.DirectoryInfo(e.Node.Tag)

		' 해당 폴더의 자식폴더들을 GetDirectories 메소드로 갖여오고
		' 이집합체를 순환하면서 현재의 폴더개체의 정보를 새로운 TreeNode를 만들어 붙인다
		For Each oNextDir As System.IO.DirectoryInfo In oDirectory.GetDirectories
			Dim oNode As New TreeNode
			' TreeNode의 Tag속성에 새폴더의 정보보관시키고
			oNode.Tag = oNextDir.FullName
			' TreeNode의 Text값..
			oNode.Text = oNextDir.Name
			' 새 TreeNode도 자식노드를 빈노드를 하나 만들어주고
			oNode.Nodes.Add("*BLANK*")
			' 새로만든 TreeNode를 자식으로 추가시키고
			e.Node.Nodes.Add(oNode)



		Next
		'' 해당 폴더에 속한 화일을 별도로 추가한다..
		'' 이것을 제외하면 폴더만 만들어진다
		For Each oFile As System.IO.FileInfo In oDirectory.GetFiles
			e.Node.Nodes.Add(New TreeNode(oFile.Name))
		Next
	Catch ex As Exception

	End Try

End Sub

위와 같이 간단한 몇줄을 실행하면 아래와 같이 만들어진다..



위에서..
Dim oDirectory As System.IO.DirectoryInfo
oDirectory = New System.IO.DirectoryInfo(e.Node.Tag)

는 My.Computer.FileSystem으로 얻어도 좋다

Dim oDirectory As System.IO.DirectoryInfo = My.Computer.FileSystem.GetDirectoryInfo(e.Node.Tag)

***[LOG-IN]***