🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

8292閲覧

c# CommonOpenFileDialog モーダルについて

wada3

総合スコア103

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/02/25 10:50

編集2021/02/26 04:38

OS:Windows 10 Pro
VisualStudioのバージョン:VisualStudio pro 2019
プロジェクトの種類(WPF)、
フレームワークの種類(.NET Framework 4.8)
・CommonOpenFileDialogはnamespace Microsoft.WindowsAPICodePack.Dialogsのものを使っています。

c#でCommonOpenFileDialogを使ってモーダルを表示させてフォルダ選択をする処理を作りました。
下記の2点についてわかる方もしくはアドバイスいただける方、知恵をお借りしたいです。

・実行時にモーダルの外側をクリックするとモーダルが隠れてしまいます。外側をクリックしても隠れ無くしたいです。

・下記のコードではマイコンピュータ(エクスプローラーの「PC」)から毎回表示したいのですが、マイコンピュータから表示ができないです。

var dlg = new CommonOpenFileDialog();

// フォルダ選択にする
dlg.IsFolderPicker = true;

dlg.InitialDirectory = System.Environment.GetFolderPath( Environment.SpecialFolder.MyComputer );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/26 01:21 編集

・ソースコードはコードの挿入で記入してください。 ・開発環境を記入してください。 OS、VisualStudioのバージョン プロジェクトの種類(WindowsForms、WPF、コンソール等)、 フレームワークの種類(.NET Framework X.XX、.NETCore X.X等) ・CommonOpenFileDialogは標準では存在しないクラスですが、別ライブラリ・自作クラスの類ならそれも追記してください。
退会済みユーザー

退会済みユーザー

2021/02/26 01:06

>・実行時にモーダルの外側をクリックするとモーダルが隠れてしまいます。外側をクリックしても隠れ無くしたいです。 常に最前面に表示したいということでしょうか?
wada3

2021/02/26 02:06

その通りにです。
wada3

2021/02/26 02:06

その通りです。
退会済みユーザー

退会済みユーザー

2021/02/26 02:21 編集

回答文は完成していますが、質問の修正依頼に対応頂けないようなので回答は差し控えます。修正を確認した後に回答させて頂きます。
wada3

2021/02/26 04:37

OS:Windows 10 Pro VisualStudioのバージョン:VisualStudio pro 2019 プロジェクトの種類(WPF)、 フレームワークの種類(.NET Framework 4.8) ・CommonOpenFileDialogはnamespace Microsoft.WindowsAPICodePack.Dialogsのものを使っています。
退会済みユーザー

退会済みユーザー

2021/02/26 04:39

コードの挿入は判りますか?「<code>」ってアイコンがあると思いますけど
wada3

2021/02/26 05:13

パソコンが違う都合上、コード添付が難しい状況です。いまの情報でなんとか回答頂けないでしょうか
guest

回答3

0

WindowsFormsのOpenFileDialogなら、下記コードでいけました。
WPFのプロジェクトでも、一応System.Windows.Formsを参照すれば使用可能です。

C#

1 const string CLSID_MyComputer = "{20D04FE0-3AEA-1069-A2D8-08002B30309D}"; 2 3 using (var frm = new System.Windows.Forms.Form()) 4 using (var dlg = new System.Windows.Forms.OpenFileDialog()) 5 { 6 frm.TopMost = true; 7 dlg.InitialDirectory = $"::{CLSID_MyComputer}"; 8 dlg.ShowDialog(frm); 9 }

WindowsAPICodePackのCommonOpenFileDialogも試してみましたが、ShowDialogの引数がウィンドウハンドルになっているので、それだけ修正すれば問題なく行けました。

C#

1 const string CLSID_MyComputer = "{20D04FE0-3AEA-1069-A2D8-08002B30309D}"; 2 3 using (var frm = new System.Windows.Forms.Form()) 4 { 5 var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog(); 6 frm.TopMost = true; 7 dlg.IsFolderPicker = true; 8 dlg.InitialDirectory = $"::{CLSID_MyComputer}"; 9 dlg.ShowDialog(frm.Handle); 10 }

"{20D04FE0-3AEA-1069-A2D8-08002B30309D}" という文字列は、マイコンピュータのフォルダを表すクラスIDで、先頭に"::"を付けることで、マイコンピュータへのショートカットとなります。
Windows 10 クラスID/CLSID[GUID]のショートカットリストまとめ

投稿2021/02/26 05:20

編集2021/02/26 05:51
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wada3

2021/02/26 05:40

ドルマークはどんな意味でしょうか?パスを@をつけて可読性をあげるような意味でしょうか
退会済みユーザー

退会済みユーザー

2021/03/03 01:38

結局解決したのでしょうか? 回答だけ貰って放置は感心できませんね。
guest

0

自己解決

解決しました。ありがとうございました

投稿2021/03/10 09:36

wada3

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/10 10:22 編集

自力で解決したんですか? 私の提示した方法と違う方法で解決したのであれば、その解決方法を提示してください。
guest

0

dlg.ShowDialog()
するというはなしかな。

投稿2021/02/25 11:09

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wada3

2021/02/25 23:34

そうです。
y_waiwai

2021/02/26 00:20

普通にそれでモーダルフォームの動作となります。 おなじアプリケーション中ではそのフォームだけしかアクティブになりませんが、それではダメということでしょうか。
wada3

2021/02/26 01:13

モーダルでは隠れてしまうのは当然ということでしょうか
dodox86

2021/02/26 01:18

モーダルでも、そのダイアログボックスの親、オーナーは通常はそれを呼び出したアプリのウィンドウなので、別のアプリがアクティブになればその後ろに隠れるはずです。「質問への追記・修正、ベストアンサー選択の依頼」でradianさんがその辺りについて聞かれているので、答えましょう。それも質問要件の内です。
y_waiwai

2021/02/26 04:05

別アプリのウィンドウをクリックすると隠れます。 それは一般のファイルダイアログ画面と同じ挙動となります。 が、それではないまた別の動作をさせようということなら、独自にダイアログ画面を作成し、常に前面となるようにタイマなどで定期的にアクティブにするなどする必要がありますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問