さて、ようやく音を鳴らすというコア機能が実装されたので、次はアプリケーションをもう少し拡張しましょう。
現在はファイルを選択したらそれを鳴らすだけですが、選んだファイルは登録して再利用できるようにしましょう。「プレイリストに追加」見たいな感じですね。
よく、ファイル名や名前などが一覧で並んでいるのを、アプリケーションの中で見た事があるかと思います。これらの多くは、「リストボックスコントロール」を使っています。今回はこのリストボックスコントロールを使ったプレイリストを追加します。
今回やる事
簡単な機能は上で書いたような感じですが、もう少し細かくするとこんな感じになります。
- [画面] プレイリストボックスの追加
- [画面] リストに追加するボタンをつける
- [実装] ボタンを押したら現在選ばれているWAVファイルをリストに登録する
- [実装] リストに登録されているWAVファイルを選択すると、テキストボックスに載るようにする
ではまず画面から作って見ましょう。
画面作成
ツールボックスから ListBox コントロール、Button コントロールをフォームに配置します。

配置したコントロールは上の図のように配置し、下の表のようにプロパティを設定します。赤字と緑の文字の部分が変更する内容です。コントロールID を帰るのは(name) のプロパティを変更すればOKです。
| コントロール |
コントロール ID |
プロパティ名 |
設定値 |
| Label |
lstFileList |
|
|
| Button |
btnAdd |
Text |
"Add" |
コレで画面はOKです。では機能を付け加えていきましょう。
プログラム1:プレイリストに追加
Add ボタンをダブルクリックして、そこにコードを書きます。(緑のコメント行はあくまでメモ書きですので、はじめの // 以降はどのように書いてもかまいません。)
private void btnAdd_Click( object sender, EventArgs e ) { // リストボックスにWAVファイルのパスを登録する this.lstFileList.Items.Add( this.txtFile.Text ); }
|
なんとも簡単ですね。リストボックスの中身を示しているのが lstFileList.Items です。リストの中身一つ一つは Item 何ですね。そしてその集合が Items です。ちゃんと複数形になっていますね。^^
そのリストの中身に新たに追加するのが Add メソッドです。Add メソッドは引数に追加するものを入れます。このAdd メソッドは大変自由度が高くて、文字列でも数字でも OK です。ですから txtFile.Text をそのまま入れています。
this.lstFileList.Items.Add( this.txtFile.Text );
を訳せば、txtFile テキストボックスに入っている文字列(ファイルパス)を lstFileList リストボックスの項目として、新規にひとつ追加する。 といった感じですね。
プログラム2:リストの項目を選択した場合
今度はリストボックスに追加されたファイルを選択したら、テキストボックスにかかれるようにします。
もう一度画面を出して、今度はリストボックスをダブルクリックします。そしてコードを実装します。
private void lstFileList_SelectedIndexChanged(object sender, EventArgs e) { // リストボックスで選択された項目をテキストボックスに反映する this.txtFile.Text = this.lstFileList.SelectedItem.ToString(); }
|
またも簡単です。今後は逆ですね。
リストボックスの項目を選択した場合、選択した項目は lstFileList.SelectedItem に入ります。コレを ToString 関数で文字列に変換します。テキストボックスに文字列しか入らないので、きちんと ToString 関数で文字列にしておきます。
これで、テキストボックス ← Click, Add → リストボックス の実装が出来上がりました。
テストする
さて、テストしてみましょう。
- ... ボタンをおして、WAV ファイルを選択
- Play ボタンで音チェック
- Add ボタンでリストボックスに項目を追加 (追加された事を確認する)
- テキストボックスの中身を削除する
- リストボックスに追加された項目を選択してテキストボックスに戻る事を確認
- Play ボタンで音チェック
こんな感じですね。勿論リストボックスには複数の項目を追加する事ができます。

削除機能の追加
さて、このままだと追加されるばかりですので削除機能も欲しいですね。と言うことで削除機能です。こんかいは、詳しい事は書きませんので、ここの情報で実際にやってみてください。

コードはこんな感じです。
private void btnDelete_Click(object sender, EventArgs e) { int select = this.lstFileList.SelectedIndex; this.lstFileList.Items.RemoveAt(select); } |
簡単に解説。リスボックスから項目を削除するためには、RemoveAt 関数を使います。そのとき、「何番目の項目」を削除するか、数字で指定します。って事は選択している項目が、何番目の項目か取得する必要があります。選択項目の番号は SelectedIndex に入っています。って事で、
- 選択されている項目の番号を取得
- RemoveAt で項目を削除
といった感じの処理です。
宿題
この Delete 処理は問題があります。さてどこでしょう?そしてどう治したらいいでしょう?
いろいろテストをしてみると多分わかります。
次は
今まできちんと抑えていなかった、アプリケーションとしてちゃんとまとめる方法について抑えておきたいと思います。