簡易エクスプローラ

<戻る

ここに載せてあるソースコードは、参考のために載せてあります

サンプルコードは、一番下にLZHとしてあります




Option Explicit

'フォームのロードイベントです
Private Sub Form_Load()
    Dim j As Integer, jmax As Integer
    Dim cleDrive As New Collection
    Dim strX As String
    
    'Driveコントロールから
    'ドライブを列挙します
    jmax = Drive1.ListCount - 1
    For j = 0 To jmax
        'ドライブ名の抽出です
        strX = Mid(Drive1.List(j), 1, BackInstr(Drive1.List(j), ":"))
        'ドライブをコレクションに格納します
        cleDrive.Add strX
        'ノードを作成します
        TreeView1.Nodes.Add , , strX, strX, "Drive"
    Next
    
    '格納したドライブコレクションを使い
    '下層のフォルダを見つけ
    'ノードを作成します
    TreeEnum cleDrive
    
End Sub

'フォームのサイズ変更イベントです
Private Sub Form_Resize()
    TreeView1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub

'下層のフォルダを検索してノードを作成します
Sub TreeEnum(ByVal cleDir As Collection)
    Dim vriEnum As Variant
    Dim j As Integer, jmax As Integer
    Dim strX As String, strM As String
    
    On Error Resume Next
        
    For Each vriEnum In cleDir
        
        'Dirコントロールにパスを入れます
        Dir1.Path = vriEnum & "\"
        
        
        Select Case Err.Number
            Case 0
                '既にノードがある場合の処理はしていません
                'ノードの作成をします
                jmax = Dir1.ListCount - 1
                For j = 0 To jmax
                    strM = Dir1.List(j)
                    strX = Mid(strM, BackInstr(strM, "\") + 1, Len(strM) - BackInstr(strM, "\"))
                    TreeView1.Nodes.Add vriEnum, tvwChild, vriEnum & "\" & strX, strX, "FoldClose"
                Next
                
            'エラー処理です
            Case Else
                'デバックウィンドウ(イミディエイト)に
                'エラー内容を表示します
                'Debug.Printはスピードが落ちますので
                '削除してもかまいません
                Debug.Print Err.Description
                
                Err.Clear
                
        End Select
    Next
End Sub

'ノードを閉じた時のイベントです
Private Sub TreeView1_Collapse(ByVal Node As ComctlLib.Node)
    
    'フォルダを閉じる場合だけ
    'イメージを変更します
    If Not (InStr(1, Node.FullPath, "\") = 0) Then
        Node.Image = "FoldClose"
    End If
End Sub

'ノードを展開した時のイベントです
Private Sub TreeView1_Expand(ByVal Node As ComctlLib.Node)
    Dim cleDir As New Collection
    Dim j As Integer, jmax As Integer
    Dim strX As String
    
    'フォルダを展開する場合だけ
    'イメージを変更します
    If Not (InStr(1, Node.FullPath, "\") = 0) Then
        Node.Image = "FoldOpen"
    End If
    
    '展開したノードのフルパスを
    'Dirコントロールに入れます
    Dir1.Path = Node.FullPath & "\"
    
    'Dirコントロールからフォルダを列挙して
    'コレクションに格納します
    jmax = Dir1.ListCount - 1
    For j = 0 To jmax
        strX = Mid(Dir1.List(j), 1, BackInstr(Dir1.List(j), "\"))
        cleDir.Add Dir1.List(j)
    Next
    
    'ノードを作成します
    TreeEnum cleDir

End Sub


'//////////////////////前回紹介した関数です//////////////////////////
'応用が範囲が広いですね(・・)ノ
'VB6では標準でついているらいいけど・・・(未確認)

'逆方向Instr関数です
Public Function BackInstr(ByVal str1 As String, ByVal str2 As String) As Long
    Dim lngSeek As Long, lngStr2Len As Long
    
    '一番後ろの位置を得るために
    '文字列の長さで取得します
    lngSeek = Len(str1)
    
    lngStr2Len = Len(str2)
        
    '後ろから検索していって対象文字列(str2)が
    '見つかったら、その位置を返して関数から出ます
    Do
        If Mid(str1, lngSeek, lngStr2Len) = str2 Then
            BackInstr = lngSeek
            Exit Function
        End If
        lngSeek = lngSeek - 1
    Loop Until lngSeek <= 0
    
    '見つからなかったら0を返します
    BackInstr = 0
End Function


<戻る

Sample57.lzh


http://hp.vector.co.jp/authors/VA015521/