http://www.cnblogs.com/wssmax/archive/2005/06/03/167342.html?Pending=true#Post
如何用.NET2005做成上述资源管理器???
__________________________________________________________________________
VBA是调用API函数来实现的,.NET2005怎么实现上述功能呢??
__________________________________________________________________________
大家真的都不知道吗???
__________________________________________________________________________
其实挺简单的,就是没有想到而已,用FolderBrowserDiag控件即可*——*
__________________________________________________________________________
FolderBrowserDialog是弹出窗口,没法用到窗体中啊?
你那个链接中的代码我没有看到效果,是个X
__________________________________________________________________________
TreeView + ListView
主要代码如下(其他诸如右键菜单、拖动等功能LZ自己实现吧,这部分我还没有写,呵呵):
VB.NET code
Imports System
Imports System.Windows.Forms
Imports System.IO
Imports System.Diagnostics
Imports WeifenLuo.WinFormsUI
Public Class frmFileSystem
Inherits DockContent
Private iFiles As Integer = 0
Private iDirectories As Integer = 0
Public Sub New()
InitializeComponent()
End Sub
Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load
Dim d() As String = System.IO.Directory.GetLogicalDrives()
Dim en As System.Collections.IEnumerator = d.GetEnumerator
treeView1.BeginUpdate()
While en.MoveNext
Dim node As New System.Windows.Forms.TreeNode(en.Current.ToString)
treeView1.Nodes.Add(node)
End While
treeView1.EndUpdate()
End Sub
Private Sub AddDirectories(ByVal tnSubNode As TreeNode)
treeView1.BeginUpdate()
iDirectories = 0
Try
Dim diRoot As DirectoryInfo
If tnSubNode.SelectedImageIndex < 5 Then
diRoot = New DirectoryInfo(tnSubNode.FullPath + "/")
Else
diRoot = New DirectoryInfo(tnSubNode.FullPath)
End If
Dim dirs As DirectoryInfo() = diRoot.GetDirectories()
tnSubNode.Nodes.Clear()
For Each dir As DirectoryInfo In dirs
iDirectories += 1
Dim subNode As New TreeNode(dir.Name)
subNode.ImageIndex = 4
subNode.SelectedImageIndex = 5
tnSubNode.Nodes.Add(subNode)
Next
Catch
End Try
treeView1.EndUpdate()
End Sub
Private Sub AddFiles(ByVal strPath As String)
Me.ListViewEx1.BeginUpdate()
ListViewEx1.Items.Clear()
iFiles = 0
Try
Dim di As New DirectoryInfo(strPath + "/")
Dim theFiles As FileInfo() = di.GetFiles()
For Each theFile As FileInfo In theFiles
iFiles += 1
Dim lvItem As TreeListView.ExtendedListViewItem = Me.ListViewEx1.Items.Add(theFile.Name)
lvItem.ItemImage = GetItemBitmap.GetIcon(theFile.FullName)
lvItem.SubItems.Add(GetSizeString(theFile.Length))
lvItem.SubItems.Add(theFile.LastWriteTime.ToShortDateString + " " + theFile.LastWriteTime.ToShortTimeString)
Next
Catch Exc As Exception
statusBar1.Text = Exc.ToString()
End Try
ListViewEx1.EndUpdate()
End Sub
Private Sub treeView1_AfterSelect(ByVal sender As Object,ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeView1.AfterSelect
Call Me.AddDirectories(e.Node)
treeView1.SelectedNode.Expand()
Call Me.AddFiles(e.Node.FullPath.ToString())
statusBar1.Text = iDirectories.ToString() + "个文件夹," + iFiles.ToString() + "个文件"
End Sub
Private Sub ListViewEx1_DoubleClick(ByVal sender As Object,ByVal e As System.EventArgs) Handles ListViewEx1.DoubleClick
Dim item As TreeListView.ExtendedListViewItem = Me.ListViewEx1.SelectedItems(0)
Try
Dim sPath As String = treeView1.SelectedNode.FullPath
Dim sFileName As String = item.Text
Process.Start(sPath + "/" + sFileName)
Catch ex As Exception
MsgBox(ex.Message,MsgBoxStyle.Critical,"Error")
End Try
End Sub
Private Function GetSizeString(ByVal size As Long) As String
Dim gb As Double = 1024 * 1024 * 1024
Dim mb As Double = 1024 * 1024
Dim kb As Double = 1024
Dim sizekb As Long = CLng(Math.Ceiling(CDbl(size) / kb))
Select Case size
Case Is <= kb : Return String.Format("{0} KB",sizekb)
Case Is > gb : Return String.Format("{0:f2} GB",Math.Round(CDbl(size) / gb,2))
Case Is > mb : Return String.Format("{0:f2} MB",Math.Round(CDbl(size) / mb,2))
Case Else : Return String.Format("{0} KB",sizekb)
End Select
End Function
Public Class GetItemBitmap
Private Const SHGFI_ICON As Integer = 256
Private Const SHGFI_SMALLICON As Integer = 1
Private Const SHGFI_LARGEICON As Integer = 0
Private Structure SHFILEINFO
Public hIcon As IntPtr
Public iIcon As Integer
Public dwAttributes As UInteger
Public szDisplayName As String
Public szTypeName As String
End Structure
Private Shared Function SHGetFileInfo(ByVal pszPath As String,ByVal dwFileAttributes As UInteger,ByRef psfi As SHFILEINFO,ByVal cbFileInfo As Integer,ByVal uFlags As UInteger) As IntPtr
End Function