連載:Windowsフォーム開発入門
【Visual Studio 2010対応】

Windowsフォーム初めの一歩

初音 玲
2010/05/18
Page1 Page2 Page3

イベント駆動の考え方を身に付ける

 Windowsフォームのデザインだけならば、プロパティの設定だけで十分だが、エンド・ユーザーがWindowsフォームに対して何か操作を行ったときに、それに対する反応を返すためには、「イベント駆動」(Event Driven)という考え方を身に付けなくてはならない。とはいっても、Visual StudioのIDEがあれば心配はいらない。

 [プロパティ]ウィンドウをイベント表示に切り替えると、コントロールに対応したイベントの一覧が表示されるし、そのイベント一覧から適当なイベントを選べば、そのイベントの説明も表示される。具体的には、図11のようになる。

図11 ボタンのClickイベントに対応したイベント・プロシージャの作成
[プロパティ]ウィンドウでイベント・プロシージャを作成しているところ。[プロパティ]ウィンドウの下部には、現在選択されているイベントの説明が表示される。
  イベント一覧に切り替える。
  イベント・プロシージャ名を指定し、最後に[Enter]キーで入力を確定する。

 そして、イベントに対するプロシージャ名(=メソッド名)を入力すれば、図12のように、フォーム・デザイナが表示されていた場所にコード・エディタが表示されて、イベント・プロシージャ(=イベント・ハンドラ)のプログラミング画面になる。

図12 Clickイベント・プロシージャ指定直後のコード・エディタ
[プロパティ]ウィンドウのイベント表示で、[Click]イベントに「Save_Button_Click」というプロシージャ名を入力して[Enter]キーを押すと、この画面のようなClickイベント・プロシージャが自動作成される。なお、[(全般)]コンボボックスでコントロールを選び[(宣言)]コンボボックスでイベントを選んでも同じようにイベント・プロシージャを自動生成できる。
  コード・エディタ。
  フォーム・デザイナ。

 図12のコード・エディタ上でリスト1のコードを入力する。

Public Class FirstWinApp_Form

  Private Sub Save_Button_Click(ByVal sender As System.Object,
      ByVal e As System.EventArgs) Handles Save_Button.Click
   MessageBox.Show(Me.Name_TextBox.Text & "を保存しました。",
                   Me.Text,
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Information)
  End Sub

  Private Sub Name_TextBox_Enter(ByVal sender As Object,
      ByVal e As System.EventArgs) Handles Name_TextBox.Enter
    Me.Name_TextBox.BackColor = Color.LightGreen
  End Sub

  Private Sub Name_TextBox_Leave(ByVal sender As Object,
      ByVal e As System.EventArgs) Handles Name_TextBox.Leave
    Me.Name_TextBox.BackColor =
      System.Drawing.SystemColors.Window
  End Sub

End Class
リスト1 FirstWinAppサンプルのコード例(VB)<

 なおC#の場合は、リスト2のようなコードになる。ただし、VBの場合は「Handles」が明記されてイベント・プロシージャとして自動生成されるが、C#の場合はイベント・プロシージャとしての定義は.designer.csファイル側に自動生成される。そのため、リスト2を打ち込む前に[プロパティ]ウィンドウを使って、以下のイベント・プロシージャ(=メソッド)を事前に記述しておく必要がある。

  • ボタンの[Click]イベントに「Save_Button_Click」
  • テキストボックスの[Enter]イベントに「Name_TextBox_Enter」
  • テキストボックスの[Leave]イベントに「Name_TextBox_Leave」

 リスト2を打ち込む前に(VBと異なり)[プロパティ]ウィンドウの[Enter]イベントに「Name_TextBox_Enter」を、[Leave]イベントに「Name_TextBox_Leave」を事前に記述しておく必要がある。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Save_Button_Click(object sender, EventArgs e)
    {
      MessageBox.Show(this,
        this.Name_TextBox.Text + @"を保存します。B",
        this.Text,
        MessageBoxButtons.OK,
        MessageBoxIcon.Information);
    }

    private void Name_TextBox_Enter(object sender, EventArgs e)
    {
      this.Name_TextBox.BackColor = Color.LightGreen;
    }

    private void Name_TextBox_Leave(object sender, EventArgs e)
    {
      this.Name_TextBox.BackColor =
        System.Drawing.SystemColors.Window;
    }
  }
}
リスト2 FirstWinAppサンプルのコード例(C#)

Save_Button_Clickプロシージャ

 [保存]ボタンがクリックされると、Clickイベントが発生する。このClickイベントにより自動的呼び出される(=イベント駆動)プロシージャがSave_Button_Clickプロシージャだ。このプロシージャの中では、MessageBox.Showメソッドを呼び出してメッセージボックスを表示する。

Name_TextBox_Enterプロシージャ

 テキストボックスがフォーカスを得ると、Enterイベントが発生する。このEnterイベントにより自動的に呼び出されるのがName_TextBox_Enterプロシージャだ。このプロシージャの中では、テキストボックスの背景色(=BackColorプロパティ)を「LimeGreen」にする。これは、フォーカスを得ているコントロールを分かりやすくする配慮である。

Name_TextBox_Leaveプロシージャ

 テキストボックスがフォーカスを失うと、Leaveイベントが発生する。このLeaveイベントにより自動的に呼び出されるのがName_TextBox_ Leaveプロシージャだ。このプロシージャの中では、テキストボックスの背景色(=BackColorプロパティ)をデフォルトの色に戻すために、「System.Drawing.SystemColors.Window」というシステム・カラーを指定している。

プロパティの設定(コードで? [プロパティ]ウィンドウで?)

 プロパティの設定は、[プロパティ]ウィンドウとコードのどちらで行うべきだろうか。

 固定的なプロパティ値や初期プロパティ値は[プロパティ]ウィンドウで設定し、それ以外の可変的なプロパティ値や実行後に変更すべきプロパティ値はコードで記述するのがよいだろう。

 なお、[プロパティ]ウィンドウで指定した内容は、Windowsフォームのファイル(例えば「Form1.vb」)に対応する.Designers.vbファイル(例えば「Form1.Designers.vb」)にプログラム・コードとして保存される。もし何かプロパティの書き方で分からないことがあったときは、[プロパティ]ウィンドウでそのプロパティを(仮で)指定した後に、.Designer.vbファイルの内容を参照して、どのようなコードを書けばよいかを学ぶのがお勧めだ。

まとめ

 Visual Studio 2010を使ってWindowsフォームを作成する手順を、簡単な画面デザインのサンプル作成手順に沿って説明した。Visual StudioのIDEは多機能なので、今回説明した方法以外でもWindowsフォーム・アプリを作成できるかもしれないが、業務アプリの開発経験に基づいて誰もが同じ方法を採れる流れで説明した。

 次回以降は今回の内容を踏まえて、Windowsフォームを作成するうえでの知識を積み上げていきたいと思う。End of Article


 INDEX
  [連載]Windowsフォーム開発入門【Visual Studio 2010対応】
  Windowsフォーム初めの一歩
    1.IDEでどのように操作してフォームをデザインしていくのか
    2.Windowsフォームの基本的なデザイン
  3.イベント駆動の考え方を身に付ける

インデックス・ページヘ  「Windowsフォーム開発入門」


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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH