Top > プログラミング > .NET Tips> フォルダの選択ダイアログを表示する

フォルダの選択ダイアログを表示する」への評価、コメント

評価

良い / 悪い = 82 / 10 (「良い」の割合 = 0.891 , 人気度 = 1.750

評価する

コメント一覧


通常のコメント
Honzeee 2019/03/28 (Thu) 02:16:14
ポイントは別スレッドの完了待ち(Await)する前にダイアログ表示することと、時間差(コンピュータの性能依存ですが、500ms以内に表示が完了すること想定してます「Sleep(500)」)でキー操作をすることで目的のフォルダに強制移動させていること。

読み解けるひとには難しくないコードではありますが、一応簡単に解説


ちゃんと読み解いてませんが、スタックオーバーフローのやつは、ツリーを読み解いて再選択してキー操作で移動しているだけに見えるので、もっと単純に別スレッドで無理やりキー操作してみました。

通常のコメント
Honzeee 2019/03/28 (Thu) 01:54:44
スタックオーバーフローのサンプルはメンドクサイことをしてる気がします。

以下はお馬鹿さんコードであることは理解してますが、お気楽実装できます。

Friend filepath as string = "c:\"
Friend filename as string = "aaa.txt"
Private Async Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
Dim Task1 As Task = Task.Run(Sub()
'非同期処理
System.Threading.Thread.Sleep(500)
System.Windows.Forms.SendKeys.SendWait("{DOWN}{UP}")
End Sub)

Using dlg = New FolderBrowserDialog
'Dim a = DialogResult
dlg.SelectedPath = filepath
If dlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
filepath = dlg.SelectedPath.TrimEnd("\") & "\"
Else
MessageBox.Show("キャンセルしました")
End If
End Using
Await Task1

Me.TextBox1.Text = filepath & filename


End Sub

通常のコメント
匿名 2017/07/7 (Fri) 11:22:30
「Win32 APIのSHBrowseForFolderによる方法」のマイクロソフトへのページのリンクがなく、詳細が不明です。

評価の理由
VB6HU 2016/03/9 (Wed) 00:41:50
評価:良い
判り易かった

評価の理由
匿名 2015/05/15 (Fri) 18:51:04
評価:悪い
C++に関する記述がない

通常のコメント
nda23 2015/02/25 (Wed) 16:46:15
VB.netで初期フォルダを設定し、可視領域までスクロールする方法はあります。
もっとも、ツリービューをサブクラス化するなど、かなり下位レベルのコーディングが必要です。

通常のコメント
管理人 2013/09/17 (Tue) 01:00:10
> フォルダ選択の際、不具合があるみたいです。
> 選択できるけど、スクロールしないという問題です。

ご報告有り難うございます。SelectedPathに指定したフォルダがツリービューの下の方にある場合、ダイアログが表示された時、そこまでスクロールしてくれないことがあるみたいですね。C#での解決法が、以下のページにありました。

c# - Why FolderBrowserDialog dialog does not scroll to selected folder? - Stack Overflow
http://stackoverflow.com/questions/6942150/why-folderbrowserdialog-dialog-does-not-scroll-to-selected-folder

ここにあるコードは、フォルダ選択ダイアログのウィンドウタイトルが英語の「Browse For Folder」であると決めつけていますので、この部分を日本語の「フォルダーの参照」に変える必要がありそうです。

通常のコメント
GAGA 2013/08/20 (Tue) 18:33:29
選択できるけど、スクロールしないという問題です。

通常のコメント
GAGA 2013/08/20 (Tue) 18:20:34
フォルダ選択の際、不具合があるみたいです。

https://connect.microsoft.com/VisualStudio/feedback/details/518103/bffm-setselection-does-not-work-with-shbrowseforfolder-on-windows-7

C++で申し訳ないですが、コールバック処理で以下の様にして対処しています。
※保証はできませんが…
static int CALLBACK SHBrowseForFolderCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{

if (uMsg == BFFM_INITIALIZED){
::SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData);
}else
if (uMsg == BFFM_SELCHANGED){
// 毎回、選択
::SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData);
LPARAM pos = (LPARAM)::SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, 0);
::SendMessage(hwnd, TVM_ENSUREVISIBLE, 0, pos);
::Sleep(0);
}

return 0;
}

通常のコメント
何てこったい! 2013/04/3 (Wed) 14:59:38
失礼しました。VB2010とかFrameWork4.0の問題ではないらしく、WindowsXPだとダイアログ画面のタイトルが「フォルダの参照」となりWindows7だと「フォルダーの参照」になるようです。処理上は関係ないことなのでどちらでも良いですが、記述の統一という点からはタイトルバーの表示内容が変更できないのは如何なものかと思うのですが・・・

通常のコメント
何てこったい! 2013/04/3 (Wed) 14:00:43
vb2010+FrameWork4.0で開発していますが、FolderBrowserDialogのタイトル部分が「フォルダの参照」ではなく「フォルダーの参照」になります。タイトル部分は変更できないみたいですね・・・。マニュアル作成時に他の説明部分は全て「フォルダ」なのにここだけ「フォルダー」って・・・表記統一できなくて困りますよね。

通常のコメント
管理人 2012/04/17 (Tue) 00:57:37
> Widnows7で実行しているとき、fbd.SelectedPath にユーザーフォルダ以下を指定してもうまく表示がされないのですが、これは回避できないのでしょうか…

試してみましたが、「マイミュージック」などのフォルダは問題なく表示されました。権限のないフォルダを指定した時は、無視されました。

評価の理由
cotae 2012/04/11 (Wed) 15:55:51
評価:良い
簡潔で分かりやすいです。

ただ、Widnows7で実行しているとき、fbd.SelectedPath にユーザーフォルダ以下を指定してもうまく表示がされないのですが、これは回避できないのでしょうか…

評価の理由
ほえん 2012/04/5 (Thu) 18:55:56
評価:良い
欲しかった情報が見つかって良かったです。

評価の理由
popchaps 2010/11/17 (Wed) 20:19:58
評価:良い
助かりました!

通常のコメント
dpa 2010/11/4 (Thu) 06:43:01
SelectedPath で選択はできるのですが、スクロールしないので深い階層ですと探すの大変なんですがスクロールする方法はありませんか?

評価の理由
匿名 2010/05/2 (Sun) 05:32:23
評価:良い
わかりやすいです。

評価の理由
arinko 2009/08/20 (Thu) 09:50:47
評価:良い
よく使う参照ボタン。
とても役にたつ記事でした。

.NET Frameworkのバージョンによる違い
stat 2006/11/8 (Wed) 16:22:03
.NET 2.0でも FolderBrowserDialogクラスはこのページの説明にあるとおりに使えました。

評価の理由
wrongtune 2006/01/3 (Tue) 10:24:43
評価:良い
VBを始めたばかりです。手軽に参照できるTipsはなかなか他にないので、とても重宝しています。

評価の理由
チャー 2005/10/11 (Tue) 18:59:14
評価:良い
最初はクラスの作り方がわからなかったので、できなかったのですが
現在は、できるようになりました。

評価の理由
とし 2005/02/7 (Mon) 15:36:05
評価:良い
非常に助かりました
使用頻度高いダイアログなのに、なんで無いのでしょう…>1.0

評価の理由
アングレ 2005/01/14 (Fri) 12:04:01
評価:良い
有料のソースコードをまず発見し,自分でしこしこと実装しなきゃいけないかと諦めていたときに,ここを発見!
非常に助かりました.

評価の理由
kume 2004/02/17 (Tue) 19:42:31
評価:良い
参考になりました

評価の理由
m 2004/01/8 (Thu) 15:17:21
評価:良い
ヘルプ読むのが面倒だったので助かりました

評価の理由
田渕 大輔 2003/10/9 (Thu) 00:07:36
評価:良い
何かと必要なので大変助かります。

通常のコメント
管理人 2003/09/26 (Fri) 03:14:38
>public string BrowseDialog(string description, Form owner)
>の間違いだと思います。

確認しました。ご報告ありがとうございました。

通常のコメント
NYRL 2003/09/25 (Thu) 14:34:54
.NET Framework 1.0のサンプルの[C#]


public void BrowseDialog(string description, Form owner)

public string BrowseDialog(string description, Form owner)
の間違いだと思います。

コメントの投稿

[説明]