質問者
Win10 v1607 FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyMusic が変です。

質問
-
個人プロファイル ミュージックにサブフォルダがある条件で、
Windows10 アニバーサリー アップグレード後に不審な挙動を示しています。
Windows10 v1607 build14393.10 (Pro) x64 環境下において、
Visual Studio 2013 Commuinity Update 5 Visual Basic 2013 06177-004-0444002-02930 で、
Form デスクトップアプリ で Me.FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyMusic
と設定した場合に、
Dialog が SubFolder を取得できません。
.SpecialFolder.MyMusic を .SpecialFolder.MyComputer 等に変更し、
階層を辿れば、問題なく取得できるのですが。
サンプルです。
Button 2, Label 1, FolderBrowserDialog 1 を配置したものです。
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyMusic Me.FolderBrowserDialog1.ShowNewFolderButton = False Me.FolderBrowserDialog1.Description = Me.Text & " Select Album Folder" Dim result As DialogResult = Me.FolderBrowserDialog1.ShowDialog() If result = Windows.Forms.DialogResult.OK Then Me.Label1.Text = Me.FolderBrowserDialog1.SelectedPath End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Me.FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer Me.FolderBrowserDialog1.ShowNewFolderButton = False Me.FolderBrowserDialog1.Description = Me.Text & " Select Album Folder" Dim result As DialogResult = Me.FolderBrowserDialog1.ShowDialog() If result = Windows.Forms.DialogResult.OK Then Me.Label1.Text = Me.FolderBrowserDialog1.SelectedPath End If End Sub End Class
Windows10 v1511 build10586 (Pro) x64 環境下において、問題は発生していませんでしたので、
OS の問題(バグ?・仕様変更?)と認識しています。
何方か、何か情報をお持ちでしょうか?。
すべての返信
-
暫定的に ですが、
以下の投稿 https://shiroyuki-mot-says.blogspot.com/2017/06/vb-folder-dialog-notice-201706.html に纏めた様に、
具体的には、
Root Me.FolderBrowserDialog1.RootFolder を Desktop 若しくは MyComputer にして置き、
Current の Me.FolderBrowserDialog1.SelectedPath を Environment.SpecialFolder の列挙体にします。
そして、 .Show する前に、 キーを送ります。
Tab + Tab + Right キーです。
Tab + Tab で TreeView を選ばせ、 Right で候補を展開させます。
これで、 特殊フォルダ が展開された状態で Dialog が開いて来ます。と言う対応をしています。
- 編集済み ShiroYuki_Mot 2017年6月16日 1:22 ハイパーリンク化
- 回答としてマーク ShiroYuki_Mot 2017年6月16日 1:23
- 回答としてマークされていない ShiroYuki_Mot 2017年6月16日 1:23
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年6月28日 6:21
-
私の環境(Windows 10 Enterprise 2016 LTSB, Ver 1607, Build 14393.1358)でも再現しました。
恐らく OS の不具合だと思います。C++ で検証したところ SHBrowseForFolder 関数の引数のフラグで BIF_NEWDIALOGSTYLE を指定しなかった場合には正しくサブフォルダが表示されました。以下確認コードです。
LPITEMIDLIST pidlRoot = 0; if (SUCCEEDED(SHGetSpecialFolderLocation(hWnd, CSIDL_MYMUSIC, &pidlRoot))) { BROWSEINFO bi = { 0 }; bi.hwndOwner = hWnd; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; bi.lpszTitle = TEXT("フォルダを選択してください。"); bi.pidlRoot = pidlRoot; LPITEMIDLIST pidl = (LPITEMIDLIST)SHBrowseForFolder(&bi); LPMALLOC pMalloc = 0; if (pidl != NULL && SHGetMalloc(&pMalloc) != E_FAIL) { TCHAR szDirectoryPath[MAX_PATH]; SHGetPathFromIDList(pidl, szDirectoryPath); MessageBox(hWnd, szDirectoryPath, TEXT("確認"), 0); pMalloc->Free(pidl); pMalloc->Free(pidlRoot); pMalloc->Release(); } }
BIF_NEWDIALOGSTYLE を指定した場合
BIF_NEWDIALOGSTYLE を指定しなかった場合
- 編集済み kenjinoteMVP 2017年6月16日 9:45