Entry search

第11回 日記アプリケーションを作る ―その7 既存日記の編集機能の実装)

さて現在はファイル一覧機能をと入力機能まで作成が完了した。しかしリストで日付を選択してもその日の日記を入力画面で読み込むようになっていない。今回はこの部分の機能を作成しよう。

しくみを考える

一覧画面と入力画面に関してここまで実装した機能はこのとおり

  • [一覧画面] フォルダからファイルの一覧を取り出す
  • [一覧画面] ファイルの名前(=日付)を取得する
  • [一覧画面] 入力画面を表示する
  • [入力画面] 日記ファイルを保存する
  • [入力画面] 指定した日付のファイルを読み込む

11.jpg

これらの機能を組み合わせて、日付ファイルを指定して開くために以下のように指定しよう。

  • 1.[一覧画面] ファイルの名前(=日付)を取得する
  • 2.[一覧画面] 入力画面を表示する
  • 3.日付を入力画面に渡す
  • 4.[入力画面] 指定した日付のファイルを読み込む

12.jpg

「編集」の場合の処理は以上のような感じだ。もう1つ「新規作成」の場合も考えておこう。「新規作成」は今日の日記を書くということだ。だから編集と同じようにして「今日」の日付を渡せばいい。

では実際にプログラムを直していこう。

編集日時を受け入れる準備

まずは、日付を渡される準備をしておこう。ここでは日付を受け取る変数を用意しておく。

ソリューションエクスプローラの「editForm」を右クリックして「コードの表示」を選択してコードを表示しよう。そして以下のコードを追加する。

Imports System.IO
    Public Class editForm
    Public opendateString As String
    Private Sub saveMenu_Click(ByVal sender As System.Object, …
              :

ポイントはPublicとして宣言してあることだ。Publicとして宣言してあることで、editFormの外部、つまりlistFormからこの変数にアクセスできるようになる。

13.jpg

ファイルを読み込ませる機能の使い方

さて、すでに定義されているファイル読み込み機能は、入力画面の日付を変更したら実行されるように定義してある。

01.jpg

今回はこの機能を別途利用したいわけだが、ではこの機能をどのように使ったらいいだろうか? 例えば考えられる方法として以下のようなものがある。

  • ファイル読み込み機能を別の関数としてまとめて自由に呼び出せるようにする
  • すでに定義されている関数が呼ばれるように、(プログラムから)入力画面の日付を変更する

どちらも有効な方法だ。今回は比較的処理が簡単な後者の方法をとることにする。では実際に機能を追加してみよう。

14.jpg

まずこの機能が呼ばれるのは、入力画面が表示された直後にすぐ行われなければならない。そこで、FormのLoadイベントを実装する。コード画面の上の左側にあるプルダウンリストから「(editForm イベント)」を選択し、右側からは「Load」を選択する。すると、editForm_Loadメソッドが表示される。

02s.png

では、ここにコードを実装していこう。

まず入力画面の日付(editDateコントロール)を変更するには、日付型(Date)で日付を指定してやらなければならない。しかし渡されてくる日付は文字列であるため、文字列型から日付型に変更してやらなければならない。これを実現する関数がParse関数である。Parseは必要に応じて変数の型を変えることができるので覚えておこう。

    Private Sub editForm_Load(ByVal sender As Object, …
        Dim opendate As Date
        If Me.opendateString = "" Then
            opendate = Today()
        Else
            opendate = Date.Parse(Me.opendateString)
        End If
        Me.editDate.Value = opendate
    End Sub

ここでは、もし日付の文字列が指定してなければ今日の日付を、指定してあれば指定してある文字列から日付型でデータを取り出し、最後にeditDateコントロールの日付をプログラムから変更している。

一覧画面の「編集」機能の修正

では、次に一覧画面のほうを修正しよう。今度はlistFormのコードを表示する。

こちらでは、画面を表示する前に現在リストから選択されている日付を、先ほど作成した opendateStringに渡してやる。

    Private Sub editMenu_Click(ByVal sender As System.Object, …
        Dim myeditForm As New editForm
        If Me.diaryList.SelectedIndex >= 0 Then
            myeditForm.opendateString = Me.diaryList.SelectedItem.ToString()
        End If
        myeditForm.ShowDialog()
    End Sub

まずは、リストボックス(diaryList)のSelectedIndex をチェックしている。これは何番目が選択されているかというものだが、もしリストに何も入っていない場合、「-1」が格納される。リストに何も入ってない場合には何も渡すことができないのであらかじめチェックしている。

後は、SelectedItemで選択されている項目を取得し、それをToString関数で文字列に変更して編集画面(myeditForm) のopendateStringに渡している。

新規作成機能の追加

ではついでに新規作成機能を追加しよう。一覧画面のデザイン画面を表示して、新規作成のメニューをダブルクリックしてコードを表示する。

03s.jpg

以下のようにコードを実装しよう。

    Private Sub newMenu_Click(ByVal sender As System.Object, …
        Dim myeditForm As New editForm
        myeditForm.opendateString = Today.ToString("yyyy年MM月dd日")
        myeditForm.ShowDialog()
    End Sub

やっていることは、編集メニューと変わりない。ただ、日付は本日(Today関数で取得)の日付をしている。日付の作り方は、編集画面の保存機能を実装したときと同じである。

テスト実行

ではF5キーを押して実行してみよう。テストはこんな感じ。

  • 1.一覧から項目を選択して「メニュー」から「編集」を選択
  • 2.選択された日記が表示されていることを確認
  • 3.OKボタンを押して入力画面を閉じる
  • 4.「新規作成」を選択
  • 5.本日の日付で日記が開くことを確認(本日の日記がある場合は開く)

04s.png

きちんと機能しているだろうか。うまく動いていればここまでの機能はOKだ。

まとめ

実装したコードはそれほど多くはないが、今回のからくりは非常に重要だ。画面を移動する際にうまくデータを渡す処理は非常に一般的である。今回紹介した方法も1つの方法として覚えていくといいだろう。

さて、ようやく日記の基本機能が実装されてきたが、まだ入力画面の右上のPictureBoxコントロールがぽっかりと取り残されている。次回は画像ファイルの読み込みと保存機能を追加していこう。

<執筆者プロフィール>

高橋 忍
元は、某重工業メーカにて航空機の自動操縦システムのソフトウェア 開発に従事。 その後、マイクロソフトにて開発サポート、コンサルタントを経て、 現在はエバンジェリストとして開発者に新しい技術を紹介している。難しい技術を楽しくわかりやすく伝えるのがモットー。
http://blogs.msdn.com/shintak/

高橋 忍のブログ
http://blogs.msdn.com/shintak/default.aspx
MSDN eye: 第 8 回「Windows Mobile 開発」
http://www.microsoft.com/japan/msdn/eye/

<書籍情報>

Windows Mobile 5.0のアプリケーション開発について、もっと詳しく知りたくなったら

Windows Mobile 5.0 アプリケーション開発 Beginner's Book

Windows Mobile 5.0 アプリケーション開発 Beginner's Book

高橋 忍・著/280ページ/2色印刷/B5変形/CD-ROM付
価格3129円(税込)/ISBN4-7741-2891-0/技術評論社・刊
発売日・2006年9月22日

This article posted by staff on 2006/10/19 13:10

Track back URL

http://www.willcom-fan.com/adm/mt-tb.cgi/156

Track backs: