大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

【C#】フォルダー内のファイル・フォルダーの一覧化プログラムを作成 その2

著者:北本 敦
公開日:2019/05/09
最終更新日:2019/06/02
カテゴリー:技術情報
タグ:

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)で空のメソッドを予め用意しておくなりしてください。


▲FolderBrowserDialog

コードは以下の通りです。

FolderBrowserDialogは、使用後にリソース解放されるようusingステートメントでインスタンス化します。

Descriptionにはダイアログで表示される説明文の文字列を設定。

ShowNewFolderButtonには新規フォルダー作成するボタンをダイアログに表示するかどうかを設定します。今回のプログラムの目的において、新規フォルダーの作成ができても嬉しくないはずなのでfalseを指定します。

FolderBrowserDialog.ShowDialog(this)でダイアログを呼び出し(引数にはダイアログのオーナーを指定、今回はthisすなわちForm1)、OKボタンが押下されたら、if文内の処理を実行します。そこのGenerateListメソッドに引数として渡しているFolderBrowserDialog.SelectedPathには、先程、ダイアログで指定したフォルダーのパスが格納されています。

では、次回はGenerateListメソッド内の処理を記述していくこととします。

    上に戻る