質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

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

Q&A

解決済

2回答

11291閲覧

前回の選択フォルダを次回の初期フォルダにする

baibaibailey

総合スコア1

C#

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

0グッド

0クリップ

投稿2021/12/24 04:19

前提・実現したい事
C#の勉強を始めたばかりの初心者です。

現在、FolderBrowserDialogを使用したアプリの作成をしています。

そこで、下記の点に関して分からない為ご教授いただきたいです。

何回かフォルダ選択をするときに毎回C:¥から降りていくのではなく、前回の選択フォルダを次回の初期フォルダにしたいです。

c#

1 2using System; 3using System.Drawing; 4using System.Windows.Forms; 5using System.IO; 6 7class Program 8{ 9 [STAThread] 10 static void Main() 11 { 12 Application.EnableVisualStyles(); 13 Application.Run(new Form1()); 14 } 15} 16 17class Form1 : Form 18{ 19 Button btnFolderSelect; 20 Label lblFolderPath; 21 TextBox tbFileList; 22 23 public Form1() 24 { 25 btnFolderSelect = new Button() 26 { 27 Text = "フォルダ選択", 28 Location = new Point(10, 10), 29 AutoSize = true, 30 }; 31 32 lblFolderPath = new Label() 33 { 34 Location = new Point(20, 60), 35 AutoSize = true, 36 }; 37 38 39 tbFileList = new TextBox() 40 { 41 Location = new Point(20, 90), 42 Height = 160, 43 Width = 250, 44 Multiline = true, 45 ScrollBars = ScrollBars.Both, // スクロールバー 46 }; 47 48 // イベントハンドラを登録 49 btnFolderSelect.Click += new EventHandler(btnFolderSelect_Click); 50 51 this.Controls.Add(btnFolderSelect); 52 this.Controls.Add(lblFolderPath); 53 this.Controls.Add(tbFileList); 54 55 } 56 57 58 // イベントハンドラ本体 59 void btnFolderSelect_Click(object sender, EventArgs e) 60 { 61 FolderBrowserDialog fbDialog = new FolderBrowserDialog(); 62 63 // ダイアログの説明文を指定する 64 fbDialog.Description = "ダイアログの説明文"; 65 66 // デフォルトのフォルダを指定する 67 fbDialog.SelectedPath = @"C:"; 68 69 fbDialog.ShowNewFolderButton = false; 70 71 //フォルダを選択するダイアログを表示する 72 if (fbDialog.ShowDialog() == DialogResult.OK) 73 { 74 lblFolderPath.Text = fbDialog.SelectedPath; 75 76 //指定したフォルダ内のファイル一覧をTextBoxにフルパスで1行に1ファイルずつファイル名を表示する 77 string DirectoryPath = fbDialog.SelectedPath; 78 string[] files = Directory.GetFiles(DirectoryPath); 79 80 for (int i = 0; i < files.Length; i++) 81 { 82 tbFileList.Text += files[i] + "\r\n"; 83 } 84 } 85 else 86 { 87 lblFolderPath.ResetText(); 88 tbFileList.ResetText(); 89 } 90 91 // オブジェクトを破棄する 92 fbDialog.Dispose(); 93 } 94}

試してみた事
fbDialog.SelectedPath = @"C:";
上記のコードが関係していると思い、C: SelectedPathなど書いてみたのですが上手く実装出来ません。

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

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

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

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

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

guest

回答2

0

前回の選択フォルダを次回の初期フォルダにしたい

素直にやれば良いのでは…?

fbDialog.SelectedPath に突っ込んだ場所が初期フォルダ位置になるのなら,そこに「前回の選択フォルダ」を突っ込めばいいよね,っていう.

CSharp

1//適当に最後に選択された場所を覚えておくためのフィールドでも用意して 2private string m_LastSelectedFolderPath; 3 4//------------------------------- 5//※以下はイベントハンドラ内 6 7var fbDialog = new FolderBrowserDialog(); 8 9//前回選択した場所を設定する 10if( !string.IsNullOrEmpty( m_LastSelectedFolderPath ) ) 11{ fbDialog.SelectedPath = m_LastSelectedFolderPath; } 12 13//ダイアログ表示 14if( fbDialog.ShowDialog() == DialogResult.OK ) 15{ 16 //選択した場所を覚えておく 17 m_LastSelectedFolderPath = fbDialog.SelectedPath; 18}

投稿2021/12/24 05:13

fana

総合スコア11996

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

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

0

ベストアンサー

毎回FolderBrowserDialogをnewで作り直すのと、SelectedPathを指定するのをやめればよいのではないかと。単純に、フォームデザイナからFolderBrowserDialogを配置して、使い回せばいいんじゃないですかね。
また、その場合FolderBrowserDialogをDisposeしてはいけません。

投稿2021/12/24 04:54

編集2021/12/24 04:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

baibaibailey

2021/12/24 05:05

コメントしていただきありがとうございます。 デザイナに関しては全く触っていなかったのでアドバイスも元に取り組んでみます。 仮に、現在のコードから変更する場合があれば教えていただきたいです。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/12/24 05:44 編集

現在のコードからやるなら、 ・適当なstringのクラスメンバを追加して、DialogResult.OKだった時にSelectedPathを記憶させる ・FolderBrowserDialog表示前に、上記クラスメンバをSelectedPathに書き戻す処理を追加 でよいでしょう。 まあ、FolderBrowserDialog使い回した方が無駄な処理やクラスメンバ増やさなくていいので楽だと思いますけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問