No.1
- 回答日時:
以下のようなActiveXコントロールがあります。
自分でやった事ないので、回答になりえないかもしれませんが
外部コントロールを使用するがOKなら参考に如何でしょうか。
参考URL:http://www.a1vbcode.com/app.asp?ID=118
No.2ベストアンサー
- 回答日時:
今(結構時間が掛かりましたが)、作ったばかりなのでバグがあるかもしれません。
参考程度にして下さい。[TreeView]コントロールと[ImageList]コントロールを作成し(この部分の操作説明はいいですね?)
以下のコードを貼り付けて「編集」→「置換」で
[完全に一致する単語だけを検索する]をチェックして
全角[_]を[半角スペース]に置換して下さい。(1963個の文字を置換しています)
(せっかく入れ子にしているのに、スペースがつまってしまうため[_]に変換しました)
Option Explicit
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE =_-1
Private Const ERROR_NO_MORE_FILES = 18&
Private Type FILETIME
_______ dwLowDateTime As Long
_______ dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
_______ dwFileAttributes As Long
_______ ftCreationTime As FILETIME
_______ ftLastAccessTime As FILETIME
_______ ftLastWriteTime As FILETIME
_______ nFileSizeHigh As Long
_______ nFileSizeLow As Long
_______ dwReserved0 As Long
_______ dwReserved1 As Long
_______ cFileName As String * MAX_PATH
_______ cAlternate As String * 14
End Type
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA"_(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function FindClose Lib "kernel32"_(ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA"_(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA"_(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Usr_Path As String _______'任意のフォルダ #Ver2
Private Sub Form_Load()
___ Dim s As String
___ Dim t As String
___ Dim n&
___ Dim key As Integer
____
____'イメージリストコントロールにアイコンを割り付ける
___ With ImageList1
________.ImageHeight = 16
________.ImageWidth = 16
_______ With .ListImages
____________.Add 1,_"Open", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Openfold.ico")
____________.Add 1,_"Close", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Clsdfold.ico")
____________.Add 1,_"Drive", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Drive.ico")
____________.Add 1,_"CD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Cddrive.ico")
____________.Add 1,_"FD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\35floppy.ico")
____________.Add 1,_"525FD", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\525flop1.ico")
____________.Add 1,_"Rec", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Waste.ico")
____________.Add 1,_"Desk", LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\Desktop.ico")
_______ End With
___ End With
___ TreeView1.ImageList = ImageList1
____'TreeViewコントロールにドライブを表示
'#2 __ key = 0
'#2 __ TreeView1.Nodes.Add ,_,_"rt",_"デスクトップ",_"Desk"
____
'#2 __ s$ = String$(2048, 0)
'#2 __ Call GetLogicalDriveStrings(2047, s$)__'ドライブを取得
'#2 __ Do
'#2 ______ n = InStr(s$, Chr$(0))
'#2 ______ If n > 1 Then
________
'#2 __________ key = key + 1
'#2 __________ TreeView1.Nodes.Add "rt", tvwChild,_"a-" & CStr(key),_"(" & Left$(s$, n - 2) & ")",_"Drive"
'#2 __________ TreeView1.Nodes.Item("a-" & CStr(key)).Sorted = True
____________'全てのフォルダを取得すると表示までに時間が掛かるので却下
____________'Folder_Serch Left$(s$, n - 2),_"a-" & CStr(key)
'#2 __________ s$ = Mid$(s$, n + 1)
'#2 ______ End If
'#2 __ Loop Until n <= 1
___ Usr_Path =_"c:\Windows"_____'#2
___ TreeView1.Nodes.Add ,_,_"a", Usr_Path,_"Close"
___ TreeView1.Nodes.Item("a").Sorted = True
___ Folder_Serch Usr_Path,_"a"__'#2
____
___ TreeView1.BorderStyle = ccNone
End Sub
Private Sub TreeView1_Collapse(ByVal Node As MSComctlLib.Node)
____'TreeView1の開いたフォルダのイメージを変更
___ If (Node.Image =_"Open") Then _'Drive等のイメージを変更しないように
_______ Node.Image =_"Close"
___ End If
End Sub
Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
____'TreeView1の閉じたフォルダのイメージを変更
___ If (Node.Image =_"Close") Then 'Drive等のイメージを変更しないように
_______ Node.Image =_"Open"
___ End If
____'下位フォルダの取得
___ Folder_Next_Search Node
End Sub
Sub Folder_Serch(fo, key1)
___ Dim hFF _ As Long
___ Dim FData As WIN32_FIND_DATA
___ Dim key _ As Integer
___ Dim ret _ As Long
___ Dim n ___ As Integer
___ Dim t ___ As String
____
___ key = 0
________
___ hFF = FindFirstFile(fo & "\*.*", FData)___'下位ファイル(フォルダ)検索(エラーでない場合検索ハンドルが返る)
______________________________________________'___________ この関数はファイルも取得する
___ If (hFF <> INVALID_HANDLE_VALUE) Then ____'エラーでない場合
_______ ret = 1
_______ Do While (ret <> 0)
___________ If (FData.dwFileAttributes = 16) Then _'フォルダならば
________________'フォルダ名は260文字分の領域があり、名前の後ろにChr(0)をつけて返すので
________________'________________________________ Chr(0)までの文字を取得
_______________ n = InStr(FData.cFileName, Chr$(0))
_______________ If n > 1 Then
___________________ t = Left$(FData.cFileName, n - 1)
_______________ Else
___________________ t = FData.cFileName
_______________ End If
_______________ If (t <>_"." And t <>_"..") Then
___________________ key = key + 1
____________________'カレントフォルダと親フォルダでなければ(表現が違うかも)
____________________'__________ TreeViewに追加
___________________ TreeView1.Nodes.Add key1, tvwChild, key1 & "-" & CStr(key), t,_"Close"
___________________ TreeView1.Nodes.Item(key1 & "-" & CStr(key)).Sorted = True
____________________'全てのフォルダを取得すると表示までに時間が掛かるので却下
____________________'Folder_Serch fo & "\" & t, key1 & "-" & CStr(key)
_______________ End If
___________ End If
___________ ret = FindNextFile(hFF, FData)___'次のファイル(フォルダ)を検索
_______ Loop
___ End If
___ ret = FindClose(hFF)
End Sub
Sub Folder_Next_Search(Nd As Node)
___ Dim s _ As String
___ Dim K() As String
___ Dim ki As String
___ Dim pa As String
___ Dim n _ As Integer
___ Dim i _ As Integer
____
____'With TreeView1.SelectedItem
___ With Nd
_______ If (.Children > 0) Then _'1つ下のフォルダがあれば
___________ n =_.Child.Index
___________ Do
_______________ If (TreeView1.Nodes(n).Children = 0) Then '2つ下のフォルダがなければ
____________________'Key:a?-?-?(?:は数字で連番)
____________________'(a:) a-1
____________________'(c:) a-2
____________________'_ ┗ Windows a-2-1
____________________'のように下位フォルダのキーは[上位フォルダ]_+_"-"_+_[連番]
____________________'に設定してあるのでKeyを元に下位フォルダのフルパスを取得
___________________ s = TreeView1.Nodes(n).key
___________________ K = Split(s,_"-")___________________'[-]で分けてK配列へ格納
'#2 __________________ ki = K(0) & "-" & K(1)______________'a-?はドライブ
'#2 ___________________'ドライブ情報の()を削除
'#2 __________________ pa = Replace(TreeView1.Nodes.Item(ki).Text,_"(",_"")
'#2 __________________ pa = Replace(pa,_")",_"")
'#2 __________________ For i = 2 To UBound(K)
'#2 ______________________ ki = ki & "-" & K(i)
___________________ pa =_""______________________'#2
___________________ For i = 0 To UBound(K)_______'#2
_______________________ If (i = 0) Then _________'#2
___________________________ ki = K(i)____________'#2
_______________________ Else ____________________'#2
___________________________ ki = ki & "-" & K(i)_'#2
___________________________ pa = pa & "\"________'#2
_______________________ End If
'#2 ______________________ pa = pa & "\" & TreeView1.Nodes.Item(ki).Text
_______________________ pa = pa & TreeView1.Nodes.Item(ki).Text _'#2
___________________ Next i
___________________ Folder_Serch pa, s _________________'2つ下のフォルダ取得
____________________'変数 N が子ノードの末尾の項目のインデックスになるまで、次の項目の文字列を取得
___________________ If (n =_.Child.LastSibling.Index) Then
_______________________ Exit Do
___________________ End If
____________________'変数 N を次の項目のインデックスに再設定
___________________ n = TreeView1.Nodes(n).Next.Index
_______________ Else _____________________________________'ある場合には、取得済みなので処理を終了
___________________ Exit Do
_______________ End If
___________ Loop
_______ End If
___ End With
End Sub
*******************************************************
ソースの中になるべく説明を書きましたが、表示に時間が掛かるので、一度にすべて登録せず、
フォルダを開いてから、次の検索をしています。
#2と書かれているコメントの部分は、最初見た時に、エクスプローラを作るという部分で作り始めてしまった為、
任意の場所を見落としてしまい、デスクトップから表示にしてしまいました。
・・・ということで#2の部分で訂正してあります。
(消すのがもったいなくて・・でもこの辺はかなり強引)
私も初めて作りましたので、おかしな所もあると思いますが、あくまで参考程度でお願いします。
何かおかしかったら補足してください。
あと、ListImageのアイコンは私のパソコンではそこに入っていましたが、無いかもしれませんし、
違う場所かもしれません。(探してみてください)
右側のファイル名表示の方は、どのコントロールで表示するかわかりませんでしので、
作っていません。また、質問があれば作ってみようと思います。
かなり長くなってすみません。お役に立てればと思います。
No.3
- 回答日時:
コントロールでは、駄目ですか。
。。では、以下のページより自分に合ったサンプルソースを
探してみては如何でしょうか。
いろいろなやり方での、TreeView表示があります。
(コントロールを使用するのと使用しないのと有ります。)
どのように使用するかはあなた次第です。
ガンバって下さい。
参考URL:http://www.vbdiamond.com/Sources/ViewCategory.as …
なかなか良さそうなソースがありますね。
ありがとうございます。まだまだ完成ではないので、詰まったときに参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 確認した「IPv4アドレス」 1 2022/10/26 20:45
- Windows 10 パソコンの操作ができません。。。 4 2022/06/02 18:38
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- ネットワーク 自作のサーバーPCが自宅内のネットワークに接続できない 3 2023/01/24 16:58
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- ネットワーク 「ファイル名を指定して実行」が遅い 4 2023/04/04 21:50
- C言語・C++・C# ファイルがあるのにエクスプローラでは存在しない 4 2023/02/15 17:36
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAにてツリー階層表示ツールの作成
Visual Basic(VBA)
-
TreeView の初期表示について
Visual Basic(VBA)
-
エクスプローラ風のフォルダ選択ツリーのActiveXコントロールを探しています
Visual Basic(VBA)
-
-
4
ACCESS ツリービューの作り方
その他(データベース)
-
5
エクセルで階層図を作る方法
その他(Microsoft Office)
-
6
ツリービューのノードをダブルクリックしたことを判断させるには
Visual Basic(VBA)
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
VB.NETでツリービューにフォルダ構造を表示
Visual Basic(VBA)
-
9
プロシージャからイベントをコールする
Visual Basic(VBA)
-
10
VB2005 TreeViewの任意ノード選択
Visual Basic(VBA)
-
11
ListViewコントロールでサムネイル画像を一覧表示するには?
Visual Basic(VBA)
-
12
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
13
TreeViewのTag情報取得
Visual Basic(VBA)
-
14
マクロを組んだファイルのアイコンは変更可能か
Visual Basic(VBA)
-
15
Imagelist の使い回しについて
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
同一フォルダ内の別ブックから...
-
集めたシートのシート名を変更...
-
VBA フォルダ名に特定の文字を...
-
excelマクロ 冒頭3文字が一致す...
-
ファイルとフォルダのどちらも...
-
パス名に2バイト文字(マルチバ...
-
ExcelのVBA:フォルダ内のファイ...
-
PHPで、指定フォルダ(サブフォ...
-
フォルダ内のファイルの作成日...
-
Excelのハイパーリンクについて...
-
Dreamweaverでイメージを挿入す...
-
VBA 最新のフォルダ取得
-
VBScriptで作るファイル移動プ...
-
C++のコンソールアプリケーショ...
-
VBAで行うフォルダ・ファイル検...
-
Let’s Encryptでwebroot設定な...
-
exclude xcopy 除外フォルダ指...
-
ツリービューを使って、エクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
VBA 最新のフォルダ取得
-
ファイル名と同名のフォルダを...
-
VBA フォルダ名に特定の文字を...
-
デスクトップの画像をhtmlに表...
-
Excelのハイパーリンクについて...
-
フォルダ内のPDFファイル名を変...
-
Excelで指定したフォルダに保存...
-
会社のネットワーク上のファイ...
-
【マクロ】ファイル名の日付に...
-
保存先のフォルダ名を指定した...
-
多量のファイルをフォルダに自...
-
パス名に2バイト文字(マルチバ...
-
ディレクトリ名変更してコピー...
-
Access VBA で フォルダ権限...
-
C ファイル出力で、フォルダが...
-
サーバ内のフォルダ名と各フォ...
-
フォルダにリンクを貼りたい
-
vbsで選択ダイアログを表示した...
おすすめ情報