連載

C#入門

第13 言語に内蔵されたイベント機能

(株)ピーデー
川俣 晶
2001/10/11


ウィンドウにおけるイベントの使われ方

 イベントが最も活躍するのはウィンドウのイベント処理だろう。実際の使われ方を見てみよう。以下のサンプルは以下のように作成している。まず、新規プロジェクトで、Windowsアプリケーションを選ぶ。そして、フォーム上にボタンを1個張り付ける。

Visual Studio .NETにおけるウィンドウの設計画面
新規プロジェクトでWindowsアプリケーションを選択した後、フォーム上にボタンを1つ配置する。

 そして、以下のサンプルソースの91行目の内容を書き込めば完成である。

 1: using System;
 2: using System.Drawing;
 3: using System.Collections;
 4: using System.ComponentModel;
 5: using System.Windows.Forms;
 6: using System.Data;
 7:
 8: namespace WindowsApplication2
 9: {
10:   /// <summary>
11:   /// Form1 の概要の説明です。
12:   /// </summary>
13:   public class Form1 : System.Windows.Forms.Form
14:   {
15:     private System.Windows.Forms.Button button1;
16:     /// <summary>
17:     /// 必要なデザイナ変数です。
18:     /// </summary>
19:     private System.ComponentModel.Container components = null;
20:
21:     public Form1()
22:     {
23:       //
24:       // Windows フォーム デザイナ サポートに必要です。
25:       //
26:       InitializeComponent();
27:
28:       //
29:       // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
30:       //
31:     }
32:
33:     /// <summary>
34:     /// 使用されているリソースに後処理を実行します。
35:     /// </summary>
36:     protected override void Dispose( bool disposing )
37:     {
38:       if( disposing )
39:       {
40:         if (components != null)
41:         {
42:           components.Dispose();
43:         }
44:       }
45:       base.Dispose( disposing );
46:     }
47:
48:     #region Windows Form Designer generated code
49:     /// <summary>
50:     /// デザイナ サポートに必要です。このメソッドの内容を
51:     /// コード エディタで変更しないでください。
52:     /// </summary>
53:     private void InitializeComponent()
54:     {
55:       this.button1 = new System.Windows.Forms.Button();
56:       this.SuspendLayout();
57:       //
58:       // button1
59:       //
60:       this.button1.Location = new System.Drawing.Point(88, 16);
61:       this.button1.Name = "button1";
62:       this.button1.Size = new System.Drawing.Size(104, 64);
63:       this.button1.TabIndex = 0;
64:       this.button1.Text = "button1";
65:       this.button1.Click += new System.EventHandler(this.button1_Click);
66:       //
67:       // Form1
68:       //
69:       this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
70:       this.ClientSize = new System.Drawing.Size(292, 101);
71:       this.Controls.AddRange(new System.Windows.Forms.Control[] {
72:                                       this.button1});
73:       this.Name = "Form1";
74:       this.Text = "Form1";
75:       this.ResumeLayout(false);
76:
77:     }
78:     #endregion
79:
80:     /// <summary>
81:     /// アプリケーションのメイン エントリ ポイントです。
82:     /// </summary>
83:     [STAThread]
84:     static void Main()
85:     {
86:       Application.Run(new Form1());
87:     }
88:
89:     private void button1_Click(object sender, System.EventArgs e)
90:     {
91:       MessageBox.Show(this,"Clicked!");
92:     }
93:   }
94: }
Visual Studio .NETにより作成したサンプル・プログラム10
ボタンがクリックされたときに呼び出されるイベント・ハンドラの内容を追加する(91行目)。

 これを実行すると以下のようになる。

サンプル・プログラム10の実行結果
ボタンを押すとイベント・ハンドラが実行される。

 上記のボタンを押すと、以下のメッセージが出力される。

ボタンが押されたときに表示されるメッセージ・ボックス

 さて、ソースコードを解説しよう。このソースコードでは、ボタンが押されるということを、イベントを用いて伝達する機能を持っている。イベントは、ボタンの機能を持つSystem.Windows.Forms.Buttonというクラスが持っているので、このソースコード上には記述されていない。15行目の定義により、System.Windows.Forms.Buttonクラスのインスタンスbutton1が用意されている。このbutton1を通じて、イベントにアクセスすることになる。実際にアクセスしているのは65行目である。this.button1.Click += new System.EventHandler(this.button1_Click);というコードが、ボタンのClickイベントに、89〜92行目のbutton1_Clickメソッドをハンドラとして登録している。

15: private System.Windows.Forms.Button button1;
         ・・・
65: this.button1.Click+=new System.EventHandler(this.button1_Click);
         ・・・
89: private void button1_Click(object sender, System.EventArgs e)
90: {
91:    MessageBox.Show(this,"Clicked!");
92: }

 ここで注目すべきことは、ボタン(System.Windows.Forms.Buttonクラス)のイベントがフォーム(Form1クラス)のメソッドで処理されていると言う点である。この結果、ユーザー側で記述するコードを、一カ所にコンパクトにまとめることが可能となっている。


 INDEX
  第13回 言語に内蔵されたイベント機能
    1.C#のイベント機能とは何か?
    2.イベントに引数を渡す
    3.独自のハンドラ管理
  4.ウィンドウにおけるイベントの使われ方
    5.複数ボタンに対応するハンドラ
 
「C#入門」


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 記事ランキング

本日 月間