指定したフォルダ配下のフォルダorファイルしか選択できない「ファイルを開くダイアログボックス」を作りたい

解決


ミチ  2004-09-02 20:56:51  No: 116126

お世話になります。

指定したフォルダ配下のフォルダやファイルのみを選択できる「ファイル選択ダイアログボックス」を作成したいと思っています。
例えば、基準フォルダ→C:\Test

コモンダイアログボックスの「ファイルを開く」だと、他のフォルダにも移動できてしまいますよね?
なるべくなら既に用意されているコントロールを使いたいのですが、なさそうです。
DirListBox+FileListBoxで作成しようかなとも考えています。

何か良い方法があれば知恵を貸してください。
よろしくお願いします。


ブリキ  2004-09-02 21:37:06  No: 116127

WebBrowserコントロールを使用して、
WebBrowser1.Navigate "C:\Test"
とか?


特攻隊長まるるう  2004-09-03 00:16:50  No: 116128

ボクがやるとしたらツリービューとリストビューで作ってしまいますね。
ツリーの Node を選択したらそれに対応するフォルダのファイルを
検索するだけですから。もともとコモンダイアログボックスの機能自体
自分で作ってもそれほど苦労しない程度の仕組みです。


マグ  2004-09-03 02:20:54  No: 116129

VB.NETのソースですけれど、

ミチさんが言っている動作って

Dim kakuniforudaPath As String = "C:\Documents and Settings"
        Dim kakunin As String
        Do
            With OpenFileDialog1
                .FileName = "C:\Documents and Settings\  "
                .Filter = "全てのファイル|*.*"
                kakunin = .ShowDialog
                If kakunin = DialogResult.OK Then
                    Dim mozi As String = .FileName
                    Dim mozi2 As String = LSet(mozi, kakuniforudaPath.Length)
                    If kakuniforudaPath = mozi2 Then
                        MessageBox.Show(mozi)
                        Exit Do
                    Else
                        MessageBox.Show("始めの指定フォルダからスタートしてください。")
                    End If
                ElseIf kakunin = DialogResult.Cancel Then
                    MessageBox.Show("キャンセルされました。")
                    Exit Do
                End If
            End With
        Loop

こんな感じですか?

でも、特攻隊長まるるうさんのほうがオススメだと思います。


ミチ  2004-09-03 02:42:44  No: 116130

ブリキさん、回答ありがとうございます。
うーん、違います・・。

特攻隊長まるるうさん、回答ありがとうございます。
やはりツリービューですかね…。
ツリービューはあまり慣れてないもんで、もっと簡単な方法を探してました(^^;

マグさん、回答ありがとうございます。
すみません、書くのを忘れていましたが私の環境はVB6です。
これだとファイルを選択してから、位置を判定することになりますよね?
ダイアログ上でも他のフォルダ(基準より上のフォルダ)を選択させたくないんです。


ブリキ  2004-09-03 04:33:00  No: 116131

> うーん、違います・・。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200406/04060065.txt
に手を入れれば可能では?
但し、Windows2000以降の場合ですが。

まぁ、方法はいろいろですから、好きにしたらいいと思います。


くま  2004-09-03 05:47:42  No: 116132

APIのSHBrowseFolderを使うという手もあります

ルートフォルダの指定はこの辺りが参考になると思います。
ttp://homepage2.nifty.com/DSS/VCPP/API/SHBrowseForFolder.htm


くま  2004-09-03 05:48:25  No: 116133

>SHBrowseFolder
SHBrowseForFolderでした。


ミチ  2004-09-03 18:51:46  No: 116134

ブリキさん
実現できるかもしれませんが、ファイルを開く等の操作をするわけでもないし、ただファイルが選択(ファイルパスの取得)できれば良いので、それだけのためにわざわざWebBrowserコントロールは使いたくないのが本音です。IEに依存しますし。

くまさん、回答ありがとうございます。
SHBrowseForFolderだと、フォルダしか選択できませんよね(^^;
ファイルの選択がしたいのです。

皆さんありがとうございます。
もう少し皆さんの意見を聞きたいと思います。
自分ならこうする!って意見募集します^^


nanashi  2004-09-03 19:35:53  No: 116135

> SHBrowseForFolderだと、フォルダしか選択できませんよね(^^;
> ファイルの選択がしたいのです。

出来ます。
BROWSEINFO構造体のulFlagsに BIF_BROWSEINCLUDEFILES (&H4000&)を指定すれば
一応選択したファイル名を拾うことが出来ます。

……とは言え、これじゃミチさんの用件は充たされませんよねf^_^;
やはり自作するのが一番良いんじゃないかと思います。
上手く作れば再利用できますし。


お石灰  2004-09-03 20:27:22  No: 116136

経過をみていると、回答があった方法に対して、全て後から条件を出して
拒絶してますね。先に条件を提示したら如何?
でないと、回答する気になれんでしょう?


じゃいあん  2004-09-03 22:16:25  No: 116137

お石灰さんに同意。
ちなみに私なら特攻隊長まるるうさんの意見に1票。


ミチ  2004-09-04 00:45:29  No: 116138

お石灰さん、じゃいあんさん
そうですね・・。
最初の質問で私のしたいことの意図がうまく伝わっていなかったようで、申し訳ありません。皆様。
もっと詳細に条件を書くべきでしたね。
・ファイルを開くコモンダイアログボックスみたいな動作
・指定したフォルダ配下のフォルダ・ファイルのみが選択できる
・指定したフォルダ配下以外は移動できない
以上で伝わるかと思っていました。

nanashiさん、
SHBrowseForFolderでファイル選択できるのは知りませんでした。
くまさん、すみませんでした。

私もやはり特攻隊長まるるうさんの意見の、ツリービューを使う方法が一番良いかなと思います。
これから作るとします。

みなさん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加