资源管理器如何用.net2005实现
http://www.cnblogs.com/wssmax/archive/2005/06/03/167342.html?Pending=true#Post如何用.NET2005做成上述资源管理器??? --------------------编程问答-------------------- VBA是调用API函数来实现的,.NET2005怎么实现上述功能呢?? --------------------编程问答-------------------- 大家真的都不知道吗??? --------------------编程问答-------------------- 其实挺简单的,就是没有想到而已,用FolderBrowserDiag控件即可*——* --------------------编程问答-------------------- FolderBrowserDialog是弹出窗口,没法用到窗体中啊?
你那个链接中的代码我没有看到效果,是个X
--------------------编程问答-------------------- TreeView + ListView
主要代码如下(其他诸如右键菜单、拖动等功能LZ自己实现吧,这部分我还没有写,呵呵):
--------------------编程问答-------------------- Mark
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
<Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=256)> _
Public szDisplayName As String
<Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=80)> _
Public szTypeName As String
End Structure
<Runtime.InteropServices.DllImport("Shell32.dll")> _
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
<System.Runtime.InteropServices.DllImport("user32.dll", CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function DestroyIcon(ByVal handle As IntPtr) As Boolean
End Function
Public Shared Function GetIcon(ByVal filename As String) As Drawing.Bitmap
Dim iconbitmap As Drawing.Bitmap
Dim shinfo As New SHFILEINFO()
Dim hImgSmall As IntPtr = SHGetFileInfo(filename, 0, shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON Or SHGFI_SMALLICON)
Dim icon As Drawing.Icon = System.Drawing.Icon.FromHandle(shinfo.hIcon)
iconbitmap = icon.ToBitmap()
DestroyIcon(shinfo.hIcon)
Return iconbitmap
End Function
End Class
End Class
补充:.NET技术 , VB.NET