PR

アプリケーションの起動日時をステータスバーに表示させる

図18●ステータスバーに追加できるコントロールの一覧
図19●Loadイベントに対応するイベント・ハンドラのスケルトン・コード
図20●アプリケーションを起動した日時をステータスバーに表示するアプリケーションの実行結果
図21●テキスト・ファイルの行数をカウントするアプリケーションを実行させているところ
リスト1●図21のアプリケーションを作成するために追加するプログラム・コード
図22●開発したアプリケーションにClickOnce機能を付加するためのウィザード
図23●アプリケーションを配布するブラウザ画面

 手始めに,アプリケーションが起動した日付と時間をステータスバーに表示するプログラムを作成してみましょう。フォーム・デザイナ左のツールボックスで,「メニューとツールバー」カテゴリの中にある「StatusStrip」コントロールをマウスでクリックしたら,フォームの上でクリックしてください。するとフォームにステータスバーが追加されます。追加されたステータスバーの右端にあるドロップダウン・リストをクリックするとステータスバーに追加できるコントロールの一覧が表示されます(図18)。ここではアプリケーションの状態を表示するための「StatusLabel」を選択します。

 追加したステータス・ラベルにはデフォルトで「toolStripStatusLabel1」という長い名前が付けられています。面倒ですから「toolLabel1」のような短い名前に変更しておきましょう。名前の変更は先ほどと同じで,フォーム・デザイナでステータス・ラベルを選択してからプロパティ・ウィンドウの「Name」欄で行います。

 次にアプリケーションが起動したときに,「日付と時間」をステータス・ラベルに表示させる処理を記述します。フォーム・デザイナでフォームを選択するか,プロパティ・ウィンドウの上段にあるドロップダウン・リストで「Form1 System.Windows.Forms.Form」を選択した後,プロパティ・ウィンドウの稲妻マークをクリックしてイベント一覧を表示します。一覧の中から,アプリケーションが起動して最初にフォームを作成したときに発生するイベントであるLoadを探して,Load欄の右側の空白の部分でダブルクリックしてください。IDEの中央部がフォーム・デザイナからコード・ウィンドウに切り替わり,Loadイベントに対応する処理(「イベント・ハンドラ」と呼びます)のスケルトン・コードがエディタに挿入された状態になります(図19[拡大表示])*22。エディタ上で点滅しているカーソルの上下にある{ }(中カッコ)の間に何らかの処理を記述しておくと,アプリケーションが起動してフォームがロードされるタイミングで,その処理が実行されます。

 今回のアプリケーションの場合,Loadイベント・ハンドラの内部にC#言語で次のように記述します。

DateTime 起動日時 = DateTime.Now;

これは,DateTimeという型で「起動日時」という識別子(名前)を持つ変数を宣言し,現在時刻を表すプロパティである「Now」の内容をそこに格納する処理です*23。ステートメントの中央にある等号記号は,右辺から左辺への代入を表す式です。C#では英字の大文字と小文字は異なる文字として扱われますから,大文字・小文字を間違えないようにしてください。VS 2005では識別子(変数やオブジェクトの名前)に日本語が使えるようになりますので,それを利用しています*24

 次にフォームに追加したステータスバー上のステータス・ラベル(toolLabel1)に,「起動日時」変数が持つ日付時刻をセットする処理を記述します。toolLabel1のTextプロパティに格納した文字列がステータス・ラベルに表示されますから,コードは

toolLabel1.Text =
起動日時.ToLongDateString()
+ 起動日時.ToLongTimeString();

となります。

 toolLabel1のTextプロパティにアクセスするにはtoolLabel1.Textと記述します。等号の右辺では「起動日時」変数を使って日付時刻を表現する文字列を作っています。具体的には,「起動日時」変数はDateTime型なので,DateTime型のメソッドのうち,日付を表す文字列を返すメソッド(ToLongDateString)と時間を表す文字列を返すメソッド(ToLongTimeString)を組み合わせて,日付時刻を表す文字列にしています*25

 これで,アプリケーションの起動時の日付時刻を,ステータスバーに表示するプログラムの完成です。実際にプログラミングをしてみると,コードを書いている途中でIntelliSense機能が次々に候補を挙げてくれるので,実際にコードを書く量はとても少なくてすむことに気付くでしょう。

 コーディングが終わったら,「ファイル」メニューの「すべてを保存」,あるいはCtrl+Shift+Sキーでソースコードを保存し,「デバッグ」メニューの「デバッグ開始」を選ぶか,キーボードのF5キーを押して実行してみてください。ステータスバーに起動時刻を表示したフォームが立ち上がったと思います(図20[拡大表示])。エラーが起こったときには,スペルミスや「;」の抜けがないかどうかなどをチェックし,修正したらもう一度F5キーを押してみてください。

選択したテキスト・ファイルの行数をカウントして表示する

 機能を追加してみましょう。ボタンをクリックするとWindowsの標準的なファイル選択のダイアログを表示し,選択されたファイルの行数をカウントして,フォームに配置したラベルに行数を表示するようにします(図21[拡大表示])。ファイル選択ダイアログではテキスト・ファイルだけを表示させていることに注意してください。

 ツールボックスの「共通コントロール」カテゴリでButtonコントロールを選択し,フォームをクリックします。ボタンを配置したら,プロパティ・ウィンドウでボタンのTextプロパティを「ファイルを開く」に変更します。さらに,「共通コントロール」カテゴリでLabelを選んで,フォーム上に配置しておきます。

 次にツールボックスの「ダイアログ」カテゴリでOpenFileDialogコントロールを選択し,フォーム上に配置します。OpenFileDialogコントロールは実行時にいつも見えているコントロールではないため,フォーム・デザイナ下部のコンポーネント・パレットに配置されます。テキスト・ファイルだけを選択できるように設定するには,プロパティ・ウィンドウのFilterプロパティに「テキストファイル|*.txt」と入力します。ダイアログが表示されたときのキャプションは,Titleプロパティに「テキストファイルの行数をカウントする」と入力して変更しておきましょう。

 これで,見た目のデザインはできました。処理を記述していきましょう。フォーム・デザイナ上でボタンを選択したら,プロパティ・ウィンドウのイベント一覧の「アクション」カテゴリのClickイベントを選択し,空白部分をダブルクリックします。すると先ほどと同じく,コード・エディタにイベント・ハンドラのスケルトンが表示されるので,その中に処理を記述していきます。

 実際のコードはリスト1[拡大表示]のようになります。順に説明していきましょう。このプログラムではファイル入出力を扱うので,(1)のusingディレクティブでSystem.IO名前空間を指定して,FileStreamクラスを利用可能にしています。

 最初に,ファイル選択ダイアログを表示するメソッドを呼び出します。ダイアログを表示するメソッドはShowDialogです(リスト1の(2))。ファイル選択ダイアログは,ユーザーがファイルを選択しOKボタンを押したのか,あるいはキャンセル・ボタンを押したのかを,表示メソッドの戻り値として返します。OKボタンが押された場合だけ次の処理を行うので,ここではif文を使って判定を行っています。if文の下にある中カッコの内部には,ifのカッコ内の条件が成立したときに実行する処理,すなわち,選択したファイルの行数をカウントするコードを記述します。

 ファイルにアクセスするには,FileクラスのOpenメソッドを使います(3)。Openメソッドの第1引数には,ダイアログ・コンポーネントのFileNameプロパティで取得したファイル名を指定し,第2引数にはファイルを開く際のモード(ここでは読み取り専用)を指定します。Openメソッドの戻り値は,FileStream型オブジェクトであるfsに格納します。

 次に,FileStream型オブジェクトからさらに,行単位の読み込みが可能なStreamReader型オブジェクトを作り出します(4)。StreamReaderのReadLineメソッドは,1回実行するとファイルを1行単位で読み込んで次に進み,ファイルの最後になって読み込む行がなくなるとnull(ヌル=空っぽ)を返します。そこで,ファイルの最後までReadLineメソッドを繰り返し呼び出し,呼び出した回数をカウントするコードを書いてやります(5)。FileStreamは使い終わった時点で閉じる必要があるので,try~finally構文*26を使って必ず閉じるようにします(6)。最後に,ファイル名と行数を表示してプログラムは終了です(7)。

 コーディングが終わったらソースコードを保存して,F5キーで実行してみましょう。フォームが表示されたらボタンをクリックして,表示されたダイアログでファイルを選択します。選択したらOKボタンを押してください。図21のようにファイルの行数が表示されればプログラムは完成です。

ClickOnce機能を使ってプログラムをデプロイしてみよう

 最後に,ClickOnceを使って,作成したプログラムを運用環境にデプロイ(配布)してみましょう。と言っても,全然難しくはありません。機能の名称どおり,ほとんど「クリック一発」の簡単さで済みます*27

 ここでは「Nikkei001」という名前のプロジェクトをデプロイすることにします。「ビルド」メニューから「Nikkei001の発行」を選択してください。後は,ウィザードの指示に従うだけです。図22[拡大表示]で,配布の方法にWebサイトを使うのかFTPサイトを使うのか,または共有パスを使うのか,を選択します。ここではローカルのIIS上での配布を選択して,発行する場所はデフォルトのhttp://localhost/Nikkei001/をそのまま使います*28

 引き続き,配布するアプリケーションが「配布先にインストールされてオフラインでも使用可能にする」のか,「オンラインでのみの利用」なのかを選択します。ここでは前者を選択してみましょう。次に進むと確認画面が表示されますので,完了ボタンをクリックすると配布を行うためのブラウザ画面が起動します(図23[拡大表示])。

 ブラウザ画面のインストールボタンをクリックするとアプリケーションの起動を表すダイアログが表示され,続いて発行元を確認するダイアログが表示されます。ここでインストールを選択するとアプリケーションがインストールされます。引き続き,アプリケーションが起動しますので,問題なく動作することを確認してください。また,ClickOnceによる今回の配布では,配布先へのインストール・オプションを選択しているので,スタートメニューにアイコンが登録されています*29