C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103002 / 親階層)  フォルダ選択ダイアログで初期パス指定について
□投稿者/ くま (23回)-(2024/03/11(Mon) 12:33:26)

分類:[Microsoft Office 全般] 

したい事
・フォルダ選択ダイアログで初期表示時、外部ドライブを選択した場合[PC]から下の外部ドライブを選択したい。

ソフト Access 2013 または Excel 2013 64bit版
言語 VBA
OS Windows11 64bit版 または Windows11 64bit版

症状
PCドライブ構成
・ローカル ディスク(C:) 内蔵ドライブ
・ドライブ(3)(D:) 外部USBドライブ
・ドライブ(2)(E:) 外部USBドライブ
・ドライブ(1)(F:) 外部USBドライブ

上記構成で「フォルダ選択ダイアログ」を開くと
----------
ホーム
ギャラリー
----------
デスクトップ
ダウンロード
ピクチャ
ミュージック
ビデオ
----------
PC
    ローカル ディスク(C:)
    ドライブ(3)(D:)
    ドライブ(2)(E:)
    ドライブ(1)(F:)
ドライブ(1)(F:)
ドライブ(2)(E:)
ドライブ(3)(D:)
----------

と表示されます。
そこで
SHBrowseForFolder APIを使用して「フォルダ選択ダイアログ」を開いた時のイベントで
初期フォルダ(ドライブ)を指定したのですが、
内蔵ドライブの場合は[例 C:\]
    PC > ローカル ディスク(C:)
と表示され外部ドライブの場合[例 D:\]は
外部ドライブ
   ドライブ(3)(D:)
とPCの下ではない所から表示されてしまいます。
これを
   PC > ドライブ(3)(D:)
からにしたいのですがうまくいきません。

また「フォルダ選択ダイアログ」の表示に関して条件があり
1. フォルダの並び順がエクスプローラーと一緒の「数字を数値として並び変える」順である事。
※ BIF_NEWDIALOGSTYLEで対応済み
2. 新しいダイアログスタイルだとフォルダ内に一定量以上フォルダが存在する場合すべて展開されない症状があるがこれを回避する。
3. 初期表示させるフォルダが画面外の位置になる場合があるのを回避する。
※ 一つ上の階層パスを選択してで展開、その後目的のパスを選択し直すことで回避

上記3つの条件が満たされる事が必須となります。
なにか良い方法をお教え頂ければ幸いです。

下に現在の状態のコードを記載しておきます

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: フォルダ選択ダイアログで初期パス指定について /くま
 
上記関連ツリー

フォルダ選択ダイアログで初期パス指定について / くま (24/03/11(Mon) 12:33) #103002 ←Now
Re[1]: フォルダ選択ダイアログで初期パス指定について / くま (24/03/11(Mon) 12:34) #103003
  └ Re[2]: フォルダ選択ダイアログで初期パス指定について / くま (24/03/13(Wed) 07:27) #103007 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信