プロが教える店舗&オフィスのセキュリティ対策術

ツリービューで、エクスプローラー風にフォルダをたどるプログラムサンプル例を知りたいのですが、ご存知のかたはいらっしゃいませんでしょうか。
Visual Basic 2010 Express Edition を利用しています。

参考書を何冊も読みましたが、ドライブやフォルダ情報を得ても、どうやってそれらをノードにしたら良いのか、よくわかりませんでした。

VisualBasic中学校のサンプルではややこしすぎる上、エラーが発生しました。
よろしくお願いいたいします。

A 回答 (1件)

どこまで「真面目に」やりたいかにもよりますが……。



本当に真面目にやるなら,フォルダはディレクトリではないため,
MSDN) SHGetFolderLocation function
http://msdn.microsoft.com/en-us/library/windows/ …
を起点に
MSDN) SHCreateItemFromIDList function
http://msdn.microsoft.com/en-us/library/windows/ …
でIShellItemを得て,それからフォルダやファイル等を列挙していくか,
ツリービューを諦めて
MSDN) INameSpaceTreeControl interface
http://msdn.microsoft.com/en-us/library/windows/ …
を使うか,となります。
# 私は後者をC#でやろうとしてP/Invokeの宣言だけで諦めました……。


Visual Basic 中学校のサンプルというのは,
Site) VB サンプル集 - VB2010, VB2008, VB2005, VB.NET2003, VB.NET2002
http://homepage1.nifty.com/rucio/main/dotnet/Sam …
にある,
Site) VB フォルダツリー
http://homepage1.nifty.com/rucio/main/dotnet/Sam …
のことでしょうか。
非常にコンパクトなサンプルだと思いますが。
・何が分からなかったのでしょうか
・エラーとはどういうエラーでしょうか (例外であれば,その型とエラーメッセージ)
# Visual Basic 中学校には質問用の掲示板があるのですけれどね……。

この回答への補足

>Site) VB フォルダツリー
>http://homepage1.nifty.com/rucio/main/dotnet/Sam …
>のことでしょうか。

回答有り難うございます。また、私の見ていたサンプルプログラムよりも遥かにわかりやすい例を提示してくださって、重ねて御礼申し上げます。

早速打ち込んでRUNさせたところ、以下の様なエラーメッセージが表示されて、その子ノード以下はアクセス出来ません。

http://hw001.spaaqs.ne.jp/hi-001/img/CantAccess. …

http://hw001.spaaqs.ne.jp/hi-001/img/capture.png

Documents and Settings の子ノードを開きたいのですが、これはできない相談なのでしょうか?

p.s. 質問用掲示板があるのも気付きませんでした。こちらも活用したいと思います。

補足日時:2012/08/29 18:35
    • good
    • 0
この回答へのお礼

なんか色々やっているうちに一応使い物になる物が出来ましたので公開いたします。
(ホントは秘密にしておきたいんですが、回答者様へのお礼です)


Public Class Form1

__Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
____For Each drive As String In IO.Directory.GetLogicalDrives
______TreeView1.Nodes.Add(drive)
____Next
__End Sub

__Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
____Try
______Dim oya As New IO.DirectoryInfo(TreeView1.SelectedNode.FullPath)
______If TreeView1.SelectedNode.Nodes.Count = 0 Then 'もし子ノードがなければ追加する。
________For Each ko As IO.DirectoryInfo In oya.GetDirectories
__________TreeView1.SelectedNode.Nodes.Add(ko.Name)
________Next
______End If
____Catch ex As Exception
____End Try
__End Sub
End Class

visual basic 中学校のよりさらにわかりやすく、かつ、正しく動作するように仕上げました。
(e.node.は意味不明なのであえて使っていません。)

このままでも十分使えますが、本番では、さらに改良する予定です。

Yune-Kichi様、指南していただきまして本当に有難うございました。(^^v

お礼日時:2012/09/11 16:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!