[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/11/29(Tue) 01:31
投稿者名:kazuki
Eメール:
URL :
タイトル:
ツリービューにフォルダとファイルを表示するには?
現在ブラウザを作成しているのですが、お気に入りを表示する際ツリービューでやっています。
それでツリービューにお気に入りのフォルダとurlファイルを表示させたいのですが、階層構造にさせ
ることができません。プログラムはこちらのサイト様の"指定フォルダー以下の全ファイルを列
挙"の
サンプルプログラムを参考にさせていただきました。
下にプログラムを書かせていただきますが、このプログラムを実行するとお気に入りに入っている全
てのファイルがフルパスで表示され、フォルダはまた別で表示されます。
(aaaというフォルダにbbbというurlファイルがあったらaaa\bbbとaaaという感じです)

開発ソフトはVB6.0でXPHomeをで作っています。
よろしくお願いします。

Dim FolderNum As Integer 'フォルダ用のキー
Dim FileNum As Integer 'なんらかのフォルダに入ってるURLのキー
Dim FavoriteFileNum As Integer 'お気に入りに直に入ってるURL
Dim Flg As Boolean 'フォルダを経由しているかどうか

Private Sub Command1_Click()
    Dim Fso As New FileSystemObject
    FavoriteBox.Nodes.Clear
    '指定のフォルダを指定
    Call sFolderSearch2(Fso.GetFolder(CreateObject("WScript.Shell").SpecialFolder
s
("Favorites")), False)
    Set Fso = Nothing
End Sub

Private Sub sFolderSearch2(ByVal myFolder As Object, Flg)
    Dim mySubFolder As Folder
    Dim myFile      As File
    Dim Node1 As Node
    
    '現在のフォルダ内のファイルを取得
    For Each myFile In myFolder.Files
            If Flg = False Then
                FavoriteFileNum = FavoriteFileNum + 1
                Set Node1 = FavoriteBox.Nodes.Add(, , "A" & FavoriteFileNum,
myFile)
            Else
                FileNum = FileNum + 1
                Set Node1 = FavoriteBox.Nodes.Add("B" & FolderNum, Child, &qu
ot;C" & FileNum,
myFile)
            End If
    Next
    
    With myFolder
        'サブフォルダ数を取得
        If .SubFolders.Count > 0 Then
            For Each mySubFolder In .SubFolders
                FolderNum = FolderNum + 1
                Set NodX = FavoriteBox.Nodes.Add(, , "B" & FolderNum, mySubFo
lder)
                    'サブフォルダがある場合再帰的に繰り返す
                Call sFolderSearch2(mySubFolder, True)
            Next
        End If
    End With
    
    Set myFile = Nothing
    Set mySubFolder = Nothing
End Sub

投稿時間:2005/11/29(Tue) 23:07
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re: ツリービューにフォルダとファイルを表示するには?
上で質問しましたが、もう少し自分で考えてみます。
再帰的に繰り返すということに慣れていないのでもう一度プログラムの流れを見直して、それでもでき
ないようであれば質問させていただきます。

投稿時間:2005/11/30(Wed) 16:32
投稿者名:kazuki
Eメール:
URL :
タイトル:
ツリービューでフォルダのキーを取得する方法
タイトルのままなのですが、ツリービューでフォルダのキーを取得する方法ってあるのでしょうか?

投稿時間:2005/11/30(Wed) 17:07
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re: ツリービューでフォルダのキーを取得する方法
> タイトルのままなのですが、
> ツリービューでフォルダのキーを取得する方法ってあるのでしょうか?

例えば、
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)

の最後の方に、
'Tagに現在のキーを待避
TreeView1.Tag = Node.Key

と一言記述しておくと、
ノードのキーは、TreeView1.Tagの値を参照することにより取得可能です。

投稿時間:2005/11/30(Wed) 17:47
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re^2: ツリービューでフォルダのキーを取得する方法
キーの取得についてはなんとなくわかりました。
ただ、階層構造にできない原因がキーの取得ではなかっため、ツリービューの第一引数とキーの関係が
あってるのか確認することはできませんでした。そのため後日キーについてまた質問させていただくか
もしれません。

それで一番簡単だと思われる方法で階層構造にしてみようと思ったのですができませんでした。
お気に入りに入っているURLファイルのみをお気に入りという名前の下に入れてみようと思ったのです
が、原因がちょっとわかりません。一応ソースを載せておきます。

Private Sub sFolderSearch2(ByVal myFolder As Object)
    Dim mySubFolder As Folder
    Dim myFile      As File
    Dim Node1 As Node
    
    Set Node1 = FavoriteBox.Nodes.Add(, , "Root", "お気に入り")
    '現在のフォルダ内のファイルを取得
    
    For Each myFile In myFolder.Files
        FileNum = FileNum + 1
        Set Node1 = FavoriteBox.Nodes.Add("Root", Child, "C" & FileNu
m, myFile.Name)
    Next

    Set myFile = Nothing
    Set mySubFolder = Nothing
End Sub

myFolderにはお気に入りのパスがはいっています。
表示は↓になるようにしたいです
お気に入り
|−サイト名1
|−サイト名2
|−サイト名3
   ・
   ・
   ・

よろしくお願いします。

投稿時間:2005/11/30(Wed) 18:07
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^3: ツリービューでフォルダのキーを取得する方法
始めに投稿しているサンプルで階層化できてますよ。
フォルダのところをダブルクリックしてみれば分かると思います。
TreeViewのLineStyleプロパティを変更してみればもっとよく分かるかも。
それとも最初から開いた状態で表示したいということかな。

投稿時間:2005/11/30(Wed) 18:21
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re^4: ツリービューでフォルダのキーを取得する方法
> 始めに投稿しているサンプルで階層化できてますよ。
> フォルダのところをダブルクリックしてみれば分かると思います。
できてないです;;
環境によって違うとかじゃないですよね・・・?

ツリービューには
フォルダ1
|−サイト1
|−サイト2
フォルダ2
|−サイト3
ではなく
サイト1
サイト2
サイト3
フォルダ1
フォルダ2
と表示されます。

投稿時間:2005/11/30(Wed) 18:36
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^5: ツリービューでフォルダのキーを取得する方法
> ツリービューには
> フォルダ1
> |−サイト1
> |−サイト2
> フォルダ2
> |−サイト3
> ではなく
> サイト1
> サイト2
> サイト3
> フォルダ1
> フォルダ2
> と表示されます。

親ノードの指定が間違っているのでは?
親が常にRootになっているので、
状況により、

Set Node1 = .Nodes.Add("Root", Child, "C" & FileNum, myFile.Name)
                       ↑の箇所を、フォルダ2にぶら下げたいのであれば子は"Root"ではなく
"C" & FileNum のフォルダ2のキーが入るはず

つまり、

お気に入り          (親のノード無     / ノードキー"Root")
フォルダ1          (親のノード"Root" / ノードキー"C1")
|−サイト1        (親のノード"C1"   / ノードキー"C2")
|−サイト2        (親のノード"C1"   / ノードキー"C3")
フォルダ2          (親のノード"Root" / ノードキー"C4")
|−サイト3        (親のノード"C4"   / ノードキー"C5")

というイメージで
Set Node1 = .Nodes.Add("Root", Child, "C" & FileNum, myFile.Name)
                       ↑親のノードキー ↑ノードキー

投稿時間:2005/11/30(Wed) 19:04
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^5: ツリービューでフォルダのキーを取得する方法
> > 始めに投稿しているサンプルで階層化できてますよ。
> > フォルダのところをダブルクリックしてみれば分かると思います。
> できてないです;;
> 環境によって違うとかじゃないですよね・・・?
>
VBを新規に立ち上げて
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?no=5109&reno=no&oya=5109&mode=msg
view
にあるコードを貼り付けるだけ(コンパイルエラー出るから少し手直しいるけど)でできたけど。
サイト1
サイト2
サイト3
フォルダ1
フォルダ2
と表示されるとのことですが、「サイト1、サイト2、サイト3」はお気に入りの直下にあるurlじゃな
いですか?
フォルダ1内のurlファイルは正しく入っていますよ。
環境はXP Pro, 2000+SP4で共にVB6+SP5で確認してます。

#以下追加部分。
TreeViewのLineStyleを1に変更した時、コードを実行するとフォルダ部分の左側が+になりませんか?
それでそこを開くとサイト1とか表示できませんか?

投稿時間:2005/11/30(Wed) 18:33
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^3: ツリービューでフォルダのキーを取得する方法
> キーの取得についてはなんとなくわかりました。
> ただ、階層構造にできない原因がキーの取得ではなかっため、
> ツリービューの第一引数とキーの関係が
> あってるのか確認することはできませんでした。
> そのため後日キーについてまた質問させていただくかもしれません。

了解

> それで一番簡単だと思われる方法で階層構造にしてみようと思ったのですができませんでした。

> お気に入りに入っているURLファイルのみを、
> お気に入りという名前の下に入れてみようと思ったのです
> が、原因がちょっとわかりません。一応ソースを載せておきます。

'Set Node1 = .Nodes.Add("Root", Child, "C" & FileNum, myFile.Name)
Set Node1 = .Nodes.Add("Root", tvwChild, "C" & FileNum, myFile.Name)

追加の箇所で、第2引数が、自分のソースと大分違うので、
騙されたと思って変更してみてください。

投稿時間:2005/11/30(Wed) 20:01
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re^4: ツリービューでフォルダのキーを取得する方法
> 'Set Node1 = .Nodes.Add("Root", Child, "C" & FileNum, myFile.Name
)
>  Set Node1 = .Nodes.Add("Root", tvwChild, "C" & FileNum, myFile.
Name)
>
> 追加の箇所で、第2引数が、自分のソースと大分違うので、
> 騙されたと思って変更してみてください。

だまされたと思って変更してみたら解決しました。
第二引数の意味がよくわかってなかったのが原因です。。。
いなさん、GODさんありがとうございました。

投稿時間:2005/11/30(Wed) 20:38
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^5: ツリービューでフォルダのキーを取得する方法
> だまされたと思って変更してみたら解決しました。
> 第二引数の意味がよくわかってなかったのが原因です。。。
> いなさん、GODさんありがとうございました。

既に、Shift + F2キーを押下して試しているかも知れませんが、
tvwChild以外にもtvwFirst,tvwLast,tvwPrevious,tvwNext

と指定の仕方を変えると追加のされ方が変化します。

投稿時間:2005/11/30(Wed) 22:27
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re^6: ツリービューでフォルダのキーを取得する方法
> 既に、Shift + F2キーを押下して試しているかも知れませんが、
> tvwChild以外にもtvwFirst,tvwLast,tvwPrevious,tvwNext
>
> と指定の仕方を変えると追加のされ方が変化します。

わざわざありがとうございます。
お気に入りが正常に動作したらそちらのほうも試してみようと思います。

投稿時間:2005/11/30(Wed) 22:51
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
ツリービューでフォルダのキーを取得
後は下記3ヶ所 myFile → myFile.Name のように変更すればいいのでは。

Set Node1 = TreeView1.Nodes.Add(, , "A" & FavoriteFileNum, myFile.Name)
Set Node1 = TreeView1.Nodes.Add("B" & FolderNum, tvwChild, "C" & FileNum, myFile.Name)
Set NodX = TreeView1.Nodes.Add(, , "B" & FolderNum, mySubFolder.Name)

ファイルの拡張子を表示したくないなら、FileSystemObject を使って。
Fso.GetBaseName(myFile.Name)

投稿時間:2005/11/30(Wed) 23:03
投稿者名:kazuki
Eメール:
URL :
タイトル:
Re: ツリービューでフォルダのキーを取得
> 後は下記3ヶ所 myFile → myFile.Name のように変更すればいいのでは。
>
> Set Node1 = TreeView1.Nodes.Add(, , "A" & FavoriteFileNum, myFile.Name)
> Set Node1 = TreeView1.Nodes.Add("B" & FolderNum, tvwChild, "C" &
amp; FileNum, myFile.Name)
> Set NodX = TreeView1.Nodes.Add(, , "B" & FolderNum, mySubFolder.Name)
えっと、最初に乗せたプログラムだと
フォルダ1
|−フォルダ2
|−フォルダ3
 |−フォルダ4
フォルダ4はフォルダ3の中に確か入りませんでした。
そこでキーの取得について今日質問させていただきました。
いなさんに教えてもらったキーの取得方法を利用し、深い階層にあるフォルダもとりあえず正常に表示
することができました。一応下にそのプログラムを書いておきます。ただ、お気に入りの下にあるフォ
ルダが一番下に表示されていたり、自分としては気になるところが多々あるので未完成といえば未完成
ですが。。。とりあえず正常に表示されたので安心です。
明日からテストなので正常に表示されなかったらテスト勉強そっちのけでVBをやるところでした^^;


Private Sub sFolderSearch2(ByVal myFolder As Object, Flg)
    Dim mySubFolder As Folder
    Dim myFile      As File
    
    '現在のフォルダ内のファイルを取得
    For Each myFile In myFolder.Files
        FileNum = FileNum + 1
        If Flg = False Then
            Set Node1 = FavoriteBox.Nodes.Add("Root", tvwChild, "C" &
FileNum, myFile.Name)
        Else
            Set Node1 = FavoriteBox.Nodes.Add(Header, tvwChild, "C" & FileNum,
myFile.Name)
        End If
    Next
    
    With myFolder
        'サブフォルダ数を取得
        If .SubFolders.Count > 0 Then
            For Each mySubFolder In .SubFolders
                FolderNum1 = FolderNum1 + 1
                If myFolder = (CreateObject("WScript.Shell").SpecialFolders("F
avorites"))
Then
                    Set Node1 = FavoriteBox.Nodes.Add("Root", tvwChild, "B&quo
t; & FolderNum1,
mySubFolder.Name)
                    FavoriteBox.Tag = Node1.Key
                Else
                    Set Node1 = FavoriteBox.Nodes.Add(Header, tvwChild, "B" & F
olderNum1,
mySubFolder.Name)
                    FavoriteBox.Tag = Node1.Key
                End If
                'サブフォルダがある場合再帰的に繰り返す
                Header = FavoriteBox.Tag
                Call sFolderSearch2(mySubFolder, True)
                              
            Next
        End If
    End With

    'おそらく添え字?がだめっぽいからそこらへんをがんばる

    Set myFile = Nothing
    Set mySubFolder = Nothing
End Sub

投稿時間:2005/11/30(Wed) 23:12
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^2: ツリービューでフォルダのキーを取得
> 一応下にそのプログラムを書いておきます。
> ただ、お気に入りの下にあるフォルダが一番下に表示されていたり、
> 自分としては気になるところが多々あるので未完成といえば未完成
> ですが。。。とりあえず正常に表示されたので安心です。

ごめん、最初にちゃんと断っておけばよかった。

tvwChild以外にもtvwFirst,tvwLast,tvwPrevious,tvwNext
と指定の仕方を変えると追加のされ方が変化します。
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^

実際に、追加をする際に、上に追加するのか、下に追加するのかを
調整できる。

と言うことです。
#終電なくなるので、かえりま〜す。Bye