フレッシュマン企画 連載
簡単!Visual Studio 2005入門

第5回 初めてのWindowsアプリケーションの開発

デジタルアドバンテージ 一色 政彦
2007/07/09

複数の処理を1つのメソッドにまとめるには?

 それでは、「Labelコントロールのテキストに時刻の文字列を設定する処理」を実行する1つのメソッドを作成してみよう(メソッドの定義方法については、第3回の「メソッドを定義するには?」を参照)。

 まずはメソッドの名前を決定しよう。このメソッドは、「Labelコントロールのテキストに時刻の文字列を設定する処理」という内容なので、ディスプレイ領域(=Display)の時刻テキスト(=Time)を設定(=Set)する処理という意味で「SetDisplayTime」というメソッド名にしよう。

 次に、メソッドのパラメータ(入力)と戻り値(出力)を決めよう。どのような入力が必要だろうか? 例えば、現在の時刻を入力値として受け取ることが考えられるだろう。だがしかし、現在の時間はメソッドの中で取得すればよいので、わざわざ入力パラメータとして受け取る必要性はない。そこで本稿では、パラメータとして何も受け取らないことにする(もちろん入力パラメータとして現在の時刻を受け取るというメソッド仕様でもまったく問題はない)。

 また、このメソッドにはどのような出力が必要だろうか? 例えば、時刻テキストの設定に成功したか失敗したかという結果を戻り値として返すことが考えられるだろう。だがしかし、時刻文字列の取得やLabelコントロールへのテキスト設定が失敗する可能性はほぼゼロだと思われるので、成功/失敗という情報を返す必要性はないと考えられる。そこで本稿では、戻り値は何も返さないことにする(もちろん、例えばディスプレイに設定した時刻を戻り値として出力しても間違いではない)。

 このようにして、メソッドの状況を考えながら、パラメータと戻り値を決定してメソッドを定義していく。今後、メソッドの定義を行う際の参考にしてほしい。

 以上により決定したメソッドの定義は次のようなものになる。

private void SetDisplayTime()
{
}

 メソッドの前にあるprivate修飾子(VB 2005ではPrivate修飾子)はアクセシビリティを指定するためのものだ(アクセシビリティについては、第4回の解説を参照していただきたい)。ここでは、ほかのクラスからこのメソッドを呼び出す必要はないので、クラス内でのみのアクセスを許可するprivate修飾子を指定している。

 このメソッドの中に、「Labelコントロールのテキストに時刻の文字列を設定する処理」を実装すればよいので、最終的なメソッドの実装は次のようになる。

private void SetDisplayTime()
{
  timeNow.Text = DateTime.Now.ToString("HH時mm分 ss秒");
}

 timeNowオブジェクト(Labelコントロール)のTextプロパティ(テキスト)に、System名前空間のDateTime構造体のNowプロパティの値を、ToStringメソッドにより時刻表示用に文字列化して設定している。

 System名前空間は、ソース・ファイルの冒頭に「using System;」というコードにより宣言されているので、ここには記述されていない(詳しくは第4回の解説を参照)。Nowプロパティの値は、現在時刻が設定されたDateTime構造体のオブジェクトである。ここでは、そのDateTimeオブジェクトが持っているToStringメソッドを呼び出すことで、DateTimeオブジェクトの値を文字列に変換している。

 DateTime.Now.ToStringメソッドのパラメータに指定されている「HH時mm分 ss秒」という記述は「書式指定文字列」と呼ばれるもので、この文字列中の「HH」「mm」「ss」が自動的に数字に置き換わり、例えば「20時15分 56秒」のような通常の時刻表示テキストとなる(詳しくは「.NET TIPS:日付や時刻を文字列に変換するには?」を参照されたい)。

 なお構造体とは、(現段階では)クラスと同じものだと認識しても問題ない。もちろん詳しく見れば、この両者には機能面に違いがあるということも頭の片隅に置いておいてほしい(詳しくは「改訂版 C#入門」の「値型と参照型」の項を参照していただきたい)。

 それでは、このSetDisplayTimeメソッドをLoadイベントとTickイベントのイベント・ハンドラで使用してみよう。

イベント・ハンドラで自作メソッドを使用するには?

 自作メソッドの使用方法は特に難しくない。LoadイベントとTickイベントのそれぞれのイベント・ハンドラで、SetDisplayTimeメソッドを呼び出すだけだ(メソッドの呼び出し方法については、第3回の「定義済みのメソッドを使用するには?」を参照されたい)。具体的には、次の画面のように記述すればよい。

それぞれのイベント・ハンドラでのメソッドの呼び出し
LoadイベントとTickイベントの各イベント・ハンドラの中でSetDisplayTimeメソッドを呼び出して、「Labelコントロールのテキストに時刻の文字列を設定する処理」を実現している。

 そして、ここまでに作成したプログラムをビルドして実行したのが次の画面である。

ここまでに作成したプログラムをビルドして実行した画面
ここまでのコーディング作業で完成したプログラムの実行画面。プログラムの実行については、第1回の「生成されたプログラムを動かす」を参照してほしい。
  WindowsフォームのOpacityプロパティに「50%」を指定したため、半透明となり背景が薄く見える。時刻も正常に1秒ごとに更新される。

 以上で「時計」アプリケーションは完成である。

 今回作成したC#のソース・コードは以下のリンクからダウンロードできる。

 また、VB 2005開発者の参考のために、VB 2005のソース・コードも用意した。

 以上で「時計」アプリケーションのプログラミング作業を通して、開発者の目的どおりのアプリケーションを完成させることができた。これをきっかけに、さまざまなアプリケーション開発に乗り出してほしいと思う。

 さて、最終回となる次回では、アプリケーション開発の応用編として、アプリケーション開発でのトラブルの対処(「デバッグ」と呼ばれる)などのテクニックや、開発したアプリケーションの配布方法について解説する予定だ。お楽しみに。End of Article


 INDEX
  [フレッシュマン企画 連載]簡単!Visual Studio 2005入門
  第5回 初めてのWindowsアプリケーションの開発
    1.Windowsアプリケーション開発の手順
    2.コントロールやコンポーネントを配置する
    3.クラスやオブジェクトのプロパティ(性質)を変更する
    4.オブジェクトのイベント・ハンドラを追加する
  5.複数の処理を1つのメソッドにまとめるには?

インデックス・ページヘ  「簡単!Visual Studio 2005入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間