Willcom FAN でソフトウェアコンテストの連動記事を書いています。

先日は、第10回 日記アプリケーションを作る ―その6 入力機能の実装 ( Trackback )が公開されました。さて、エントリー部門としてはこれをベースに(しなくてもいいですが)オリジナルな部分をぜひ追加して参加してほしいところです。

では、どういった機能をどのようにつけたらいいのでしょう?

たとえば、この日記に天気の記録をつけるような機能はどうでしょうか?天気といっても毎回入力するのはちょっと煩雑です。そこでなじみにドロップダウンから選べるように機能を追加してみましょう。

コントロールの追加と設定

まずは入力欄をちょっと小さくして ComboBox コントロールを追加します。

まずは、プロパティから(name) を cmbWether と変更します。さて肝心のデータもここで入力しちゃいましょう。Itemsプロパティの(コレクション)横のボタンをクリックして以下の内容を入力します。

晴れ
晴れのち曇り
曇り
曇りのち晴れ
曇りのち雨

雨のち雪

台風
覚えていない

もちろん、晴れ、曇り、雨、雪だけでもいいですけどね。さて、入力が終わったらOKを押して元の画面に戻ります。

テスト実行 

- ここで一度F5を押して実行して見ましょう。編集をクリックすると確かにComboBoxが追加されています。きちんと中身も入っています。しかし起動時に空欄というのはちょっと嫌ですね。

では Shift + F5 を追加し、実際にコードを追記してみます。

起動時の処理の追加 

 まずは、コントロールとコントロールの間の隙間をダブルクリックしてeditForm_Load イベントを表示します。ここに以下のコードを追記します。


    Private Sub editForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
            Me.cmbWether.SelectedIndex = 0
    End Sub

起動したら、comboBox の1つめのアイテム(=晴れ)を選択・表示しろってことですよね。

ファイルの読み書き処理の追加 

あとは読み書きの部分の訂正です。

まずはファイルの書き込みから。


Private Sub saveMenu_Click(ByVal sender As System.Object, … Dim filepath As String filepath = "\My Documents\MyDiary\" filepath = filepath + Me.editDate.Value.ToString("yyyy年MM月dd日") filepath = filepath + ".txt" If File.Exists(filepath) = False Then Dim sw As StreamWriter sw = File.CreateText(filepath) sw.Close() End If         Using sw As New StreamWriter( _
                filepath, _
                False, _
                System.Text.Encoding.GetEncoding("Shift-JIS") _
                )
            sw.WriteLine(Me.titleText.Text)
            sw.WriteLine(Me.cmbWether.SelectedIndex.ToString())
            sw.WriteLine(Me.contentText.Text)
            sw.Close()
        End Using
End Sub

1行だけ追加です。タイトルを保存したら続けて、コンボボックスの何番目を選択しているのかを保存します。名前でもいいのですが、読み込み時に楽なので番号を保存しています。では対する読み込みのコードを見てみましょう。


    Private Sub editDate_ValueChanged(ByVal sender As System.Object, …
                :
        'ファイルの有無のチェック
        If File.Exists(filepath) Then
            ' 読み込みのためにファイルを開く
            Using sr As New StreamReader( _
                filepath, _
                System.Text.Encoding.GetEncoding("Shift-JIS") _
                )

                ' テキスト読み込み
                Me.titleText.Text = sr.ReadLine()

                Me.cmbWether.SelectedIndex = CType(sr.ReadLine(), Integer)
                Me.contentText.Text = sr.ReadToEnd()
            End Using
        End If
    End Sub

読み込みも1行です。読み込んだ数字をいったん整数に変更して(CType関数)、コンボボックスの番号として指定します。

まとめ 

以上で終了です。きちんと天気の記録はできたでしょうか?大事なところは読み込みと書き込みの順番を合わせることですね。

こんな感じで入力項目を増やしていくといろいろオリジナルなアイディアを実装できるのではないでしょうか?毎日の体重を入力するダイエット日記でもいいし、毎日の気分をこんな風に入れてもいいですね。