【C#】フォルダー内のファイル・フォルダーの一覧化プログラムを作成 その2
C#と.Net Frameworkの話をしていたら、奇しくも.Net Frameworkが現行の4.8で最終バージョンとなり、.Net 5へと統合されるという情報が舞い込んできてしまいました。それはともあれ、ファイル・フォルダーの一覧化プログラムの作成の続きです。
その1では、これから作成していくファイル・フォルダーの一覧化プログラムの仕様について述べました。今回からは、具体的にそれをどのように実装していくかコードを紹介しながら説明していきたいと思います。
まずは、コントロールを配置していくことにしましょう。とはいえ今回作成するものはシンプル。Windowsフォームアプリケーションでプロジェクトを作成し、生成されたForm1の上にButton、Label、TextBoxの3種を1つずつ以下の画像のように配置するだけです。
label1は、Textに空文字列を設定しているので何も見えない状態になっています。本来なら各コントロールにはNameをきちんと付けるべきかもしれませんが、今回は3つしか配置せず紛らわしくなることもないと思われるので、デフォルトのままにしています。
続いて、配置したコントロールのプロパティやイベントを設定していきましょう。
button1は、Textプロパティを”フォルダーを開く”にし、Clickイベントにbutton1_Clickメソッドを追加することにします。
label1は、AutoSizeプロパティをTrueにします。こうすることで、Textの内容が変わっても、その長さに応じて自動で自身のSizeを変更してくれます。
textBox1は、複数行表示するため、MultilineプロパティをTrueに。また、ScrollBarsプロパティをBothに設定し、水平・鉛直方向のいずれにもスクロールバーが表示されるようにします。さらに、WordWarpプロパティをFalse、ReadOnlyプロパティをTrueにしておきましょう。WordWrapをFalseにすることで、文字列がTextBoxの右端に達しても折り返し表示されなくなります。今回のプログラムの目的はファイル名を一覧化することなので、長いファイル名でも折り返さず1行ずつ表示する方が見やすいはずです。ReadOnlyをTrueにすると、TextBoxの文字列を入力によって改変できなくなります。今回はユーザがテキストを編集する用事はないので、Trueにしてしまって問題ありません。
今度は、ボタンクリック時に呼ばれるbutton1_Clickメソッドの中身を記述していきましょう。
ボタン押下で実行したいのは、FolderBrowserDialogを呼び出し、それによってフォルダーが指定されたら、label1にフォルダーのパスを表示、textBox1にファイル及びフォルダーの一覧を表示することです。label1のtextBox1の操作は、GenerateListという別のメソッドを作成して記述することとします。その中身は、後で解説したいと思いますので、この段階でコンパイルを通したい場合、GenerateList(fbd.SelectedPath);の行をコメントアウトするなり、private void GenerateList(string path)で空のメソッドを予め用意しておくなりしてください。
コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void button1_Click(object sender, EventArgs e) { using(FolderBrowserDialog fbd = new FolderBrowserDialog()) { fbd.Description = "フォルダーを指定してください"; fbd.ShowNewFolderButton = false; if(fbd.ShowDialog(this) == DialogResult.OK) { GenerateList(fbd.SelectedPath); } } } |
FolderBrowserDialogは、使用後にリソース解放されるようusingステートメントでインスタンス化します。
Descriptionにはダイアログで表示される説明文の文字列を設定。
ShowNewFolderButtonには新規フォルダー作成するボタンをダイアログに表示するかどうかを設定します。今回のプログラムの目的において、新規フォルダーの作成ができても嬉しくないはずなのでfalseを指定します。
FolderBrowserDialog.ShowDialog(this)でダイアログを呼び出し(引数にはダイアログのオーナーを指定、今回はthisすなわちForm1)、OKボタンが押下されたら、if文内の処理を実行します。そこのGenerateListメソッドに引数として渡しているFolderBrowserDialog.SelectedPathには、先程、ダイアログで指定したフォルダーのパスが格納されています。
では、次回はGenerateListメソッド内の処理を記述していくこととします。