| |
|
|
|
第9回 日記アプリケーションを作る ―その5 ファイル一覧機能の実装今回からアプリケーションの機能の実装を始める。まずはじめは日記の一覧を表示させる機能だ。 仕様の確認とプログラムの内容さて、ここで第3回に考えた日記アプリケーションの仕様を確認しておこう。
ということで、まずは「\My Documents\MyDiary」フォルダをチェックして、一覧画面のListBoxコントロールに一覧を追加していく処理を入れていく。 フォルダチェックのプログラムソリューションエクスプローラから「listForm.vb」を右クリックして「コードの表示」を選択してコード画面を表示しよう。 ここで、画面上からイベントコードを追加する。画面上の左のプルダウンリストから「(listformイベント)」を選択し、右側から「Load」を選択する。すると、コード上に listForm_load関数が自動的に追加されるはずだ。 Loadとは一覧画面が読み込まれた時点の処理を意味している。画面が読み込まれたらファイル一覧を取得してリストボックスに追加するというわけだ。 では一覧を取得するコードを実装してみよう。 Private Sub listForm_Load(ByVal sender As Object, …
For Each file As String In _
System.IO.Directory.GetFiles( _
"\My Documents\MyDiary\", "*年*月*日.txt")
Me.diaryList.Items.Add(file)
Next
End Sub
まず、For Eachで始まっている文の _ は1つの文を2行で表記するためのものである。そのため、_ をはずして次の行とあわせて、以下のように1行で記述してもいい。 (For Each file As String In System.IO.Directory.GetFiles … ) ここで重要なのはSystem.IO.Directory.GetFiles関数だ。この関数で “\MyDocument\MyDiary”フォルダにある”*年*月*日.txt”形式のファイル一覧を取得できる。今回の目的にうってつけの関数だ。 それを1つずつ取り出すのが For Each ~ Next の構文だ。ファイルを1つ取り出してfile変数に格納する。これをファイルの数だけ繰り返す。つまりこのFor EachからNextの間をファイルの数だけ繰り返すわけだ。 Me.diaryList.Items.Add(file)では、一覧表示画面のリストボックス(diaryList)の項目(Items)に取り出したファイル名(file)を追加(Add)しているわけだ。 このような感じでファイルを1つずつ取り出してそのファイル名をリストボックスに格納するわけである。では実行してチェックしてみよう。 実行してみるF5キーを押して実行し、エミュレータでテストしてみよう。 が、しかし、いきなりエラーが表示されてしまうだろう。 パス’ \MyDocument\MyDiary’の一部が見つかりませんでした。 そりゃそうである。まだ、このフォルダが存在しないのにもかかわらず、ファイルを参照しに行ったのでエラーになったというわけである。では、いちどShift-F5を押してデバッグを停止してコードを修正しよう。 フォルダチェック機能の追加さてどうしたらよいか? フォルダをチェックする前に、もしフォルダがなければフォルダを作成するようにコードを修正しよう。こうすれば始めて起動する際には自動的にフォルダを作成するので安心だ。 Private Sub listForm_Load(ByVal sender As Object, …
If Not System.IO.Directory.Exists( _
"\My Documents\MyDiary\") Then
System.IO.Directory.CreateDirectory( _
"\My Documents\MyDiary\")
End If
For Each file As String In _
System.IO.Directory.GetFiles( _
"\My Documents\MyDiary\", "*年*月*日.txt")
Me.diaryList.Items.Add(file)
Next
End Sub
さて、実行してみよう。今度はきちんとアプリケーションが起動されたはずだ。 ところが特に何も追加されてはいない。それもそのはず。フォルダには何もないからだ。これではテストができない。ということでテストファイルを作って登録しよう。 テストファイルをエミュレータ上に作成するまずはパソコン上でメモ帳を使ってテストファイルを作成しよう。メモ帳で以下の内容のファイルを作成し、デスクトップ上に「2006年01月01日.txt」「2006年01月02日.txt」の名前で保存しよう。
続けてこのファイルをエミュレータにコピーする。まず、エミュレータの「ファイル」メニューから「構成」を選択して、「全般」タブの「共有フォルダ」をデスクトップにあわせる。「...」ボタンをクリックしてデスクトップを指定すればOKだ。 設定が完了したら、エミュレータ上の「ファイル エクスプローラ」を起動しよう。フォルダから「Strage Card」を選択する。 実はこの「Storage Card」が先ほど選択したデスクトップとリンクしている。あとは、「2006年01月01日」「2006年01月02日」のファイルをコピーし、すでにできあがっている「マイデバイス」内の「\MyDocumen\MyDiary」に貼り付ければいい。 ではもう一度実行してみよう(実行中の場合は、Shift+F5で終了してから再度実行しよう)。 今度は、確かにファイル一覧が表示されていることが確認できるだろう。 ファイル名の抽出ファイル一覧は取得できたものの、ファイル名はフルパスになっていてあまりきれいではない。ということでリストボックスに格納する前に一度ファイル名だけを取り出す処理をしてみよう。 Private Sub listForm_Load(ByVal sender As Object, … If Not System.IO.Directory.Exists( _
"\My Documents\MyDiary\") Then
System.IO.Directory.CreateDirectory( _
"\My Documents\MyDiary\")
End If
For Each file As String In _
System.IO.Directory.GetFiles( _
"\My Documents\MyDiary\", "*年*月*日.txt")
Dim datename As String
datename = System.IO.Path.GetFileName(file)
Me.diaryList.Items.Add(datename)
Next
End Sub 今回も便利な関数を使おう。System.IO.Path.GetFileName関数は、フルパスのファイル名(\My Documents\MyDiary\2006年01月01日.txt)からファイル名だけ(2006年01月01日.txt)を取り出すことができる関数である。取り出したファイル名をdatename変数に格納して、最後にリストボックス(diaryList)に格納している。 実行するとこのような感じになる。 ほぼいい感じだが、「.txt」が邪魔だ。もう1行処理を入れて「.txt」を削ってみよう。 For Each file As String In _
System.IO.Directory.GetFiles( _
"\My Documents\MyDiary\", "*年*月*日.txt")
Dim datename As String
datename = System.IO.Path.GetFileNameWithoutExtension(file)
Me.diaryList.Items.Add(datename)
Next
GetFileNameWithoutExtension関数は先ほどのGetFileName関数と同じようにファイル名のみを取り出す関数だが、さらに拡張子も取り外してくれる。 プログラムをすっきりさせようさて、だいぶプログラムが見づらくなってきたので、以下のように書き直して、最後にプログラムをすっきりさせよう。 Imports System.IO
Public Class listForm
:
Private Sub listForm_Load(ByVal sender As Object, …
Dim filepath As String = "\My Documents\MyDiary\"
If Not Directory.Exists(filepath) Then
Directory.CreateDirectory(filepath)
End If
For Each file As String In _
Directory.GetFiles(filepath, "*年*月*日.txt")
Dim datename As String
datename = Path.GetFileNameWithoutExtension(file)
Me.diaryList.Items.Add(datename)
Next
End Sub
End Class
※変更履歴(2006年12月8日) ●6行目 ●7行目 ●10行目 まず、ファイルに関する関数はみな、System.IO. で始まっているがこれを毎回書くのは面倒であり、またコードが見づらくなる。そこで一番先頭に Impots 構文を使って System.IO を記載しておくと、これ以降の System.IOの記述を省略することができる。 また、"\My Documents\MyDiary\"が何度も出てくるので、filepath変数に格納した。これですっきりした上にもし、パスの修正があった場合に変更する箇所が1箇所で済むようになる。 まとめ今回は主にファイルの操作に関する処理を実装した。.NET Compact Framework にはファイルに関する便利な関数が多数用意されている。こういった関数を使うことで簡単に処理が実装できることが実感できたと思う。 また、最後に行ったプログラムをまとめる処理はリファクタリングと呼ばれるもので、こういったことをすることで後々プログラムが見やすくなり、また後からプログラムを修正しやすくなる。少しずつなれていこう。 では、次回は入力画面を作成していこう。 <執筆者プロフィール>高橋 忍
<書籍情報>Windows Mobile 5.0のアプリケーション開発について、もっと詳しく知りたくなったら ![]() Windows Mobile 5.0 アプリケーション開発 Beginner's Book 高橋 忍・著/280ページ/2色印刷/B5変形/CD-ROM付
This article
posted by staff
on 2006/10/12 11:25
Track back URLhttp://www.willcom-fan.com/adm/mt-tb.cgi/151 Track backs: |
最近の記事【新機種レビュー】WILLCOM 03から新色「ブラックトーン」が登場! その注目ポイントは?タッチパネル対応の画面。横スライド式のQWERTYキー... 【新機種レビュー】カメラが付いた! ポップ&カジュアルなデザインの音声端末/HONEY BEE 2(WX331KC) ウィルコムが“ミツバチ”をイメージしたポップ&カジュア... スライド、ラメ、防水 ― ウィルコムから個性的な新音声端末が続々登場! 2008年10月28日、ウィルコムから音声端末3製品と... 手描きチャットで応募するイラストコンテスト開催! 10月28日に発表されたウィルコムの新端末。それと同時に紹介された新サービス... 音楽を2倍、2倍のキャンペーン 「カメラを買うと、ポケットカメラが付いてくる」 そんな通販番組が昔あったが、... 最近のトラックバック携帯可能な無線LANアクセスポイント「どこでもWi-Fi」from あろーい日記 http://www.wi WILLCOM D4に大容量バッテリーで。 from プチ株とPDA・PCと。 WILLCOM D4に大容 アカデミックパックとくまふぉんと。 from プチ株とPDA・PCと。 WILLCOM 03につい [W-ZERO3]辛口連発!? WILLCOM 03、WILLCOM D4を本サイトライター陣が評価 ウィルコムに期待することとは?/座談会 - 後編 from Kzou’s Diary (^^ゞ 当サイトのライター陣で行 「新つなぎ放題プラン」 from ねこもばGadget! β版 へっぽこ実験ニュースサイト - WILLCOM 03応援中!! 【料金プラン】音声端末で「 このサイトについてウィルコムFANは、ウィルコム携帯端末の活用情報を提供するサイトとして株式会社アスキー(現アスキー・メディアワークス)が2006年3月15日より運営しています。続きを読む... |