方法 : Windows フォーム アプリケーションでイベントを利用する
更新 : 2007 年 11 月
一般的に Windows フォーム アプリケーションでは、フォームにコントロールを表示し、ユーザーがクリックしたコントロールに応じて特定のアクションを実行します。たとえば、ユーザーがフォーム内の Button コントロールをクリックしたときに、このコントロールによってイベントが発生します。そのイベントを処理することで、アプリケーションでは、そのボタンのクリックに対して適切なアプリケーション ロジックを実行できます。
Windows フォームの詳細については、「Windows フォームについて」を参照してください。
Windows フォームのボタン クリック イベントを処理するには
Button コントロールのある Windows フォームを作成します。
private Button button;
Private WithEvents myButton As Button
Click イベントのデリゲート シグネチャに一致するイベント ハンドラを定義します。Click イベントでは、デリゲート型に EventHandler クラス、イベント データに EventArgs クラスをそれぞれ使用します。
void Button_Click(object sender, EventArgs e) {...}
Sub Button_Click(sender As Object, e As EventArgs) ... End Sub
イベント ハンドラ メソッドを Button の Click イベントに追加します。
button.Click += new EventHandler(this.Button_Click);
AddHandler myButton.Click, AddressOf Me.Button_Click
メモ :
デザイナ (Visual Studio 2005 など) では、この例と同様のコードを生成して、イベント接続を行います。
使用例
次のコード例では、Button の Click イベントを処理して TextBox の背景色を変更します。太字で示した要素は、イベント ハンドラと、そのイベント ハンドラを Button の Click イベントに接続する方法を示しています。
この例のコードは、Visual Studio 2005 などのビジュアルなデザイナを使用せずに作成されており、プログラミングの不可欠の要素だけが含まれています。デザイナを使用した場合は、追加のコードも生成されます。
[C#]
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
public class MyForm : Form
{
private TextBox box;
private Button button;
public MyForm() : base()
{
box = new TextBox();
box.BackColor = System.Drawing.Color.Cyan;
box.Size = new Size(100,100);
box.Location = new Point(50,50);
box.Text = "Hello";
button = new Button();
button.Location = new Point(50,100);
button.Text = "Click Me";
// To wire the event, create
// a delegate instance and add it to the Click event.
button.Click += new EventHandler(this.Button_Click);
Controls.Add(box);
Controls.Add(button);
}
// The event handler.
private void Button_Click(object sender, EventArgs e) { box.BackColor = System.Drawing.Color.Green; }
// The STAThreadAttribute indicates that Windows Forms uses the
// single-threaded apartment model.
[STAThreadAttribute]
public static void Main(string[] args)
{
Application.Run(new MyForm());
}
}
[Visual Basic]
Option Strict On
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing
Public Class MyForm
Inherits Form
Private box As TextBox
Private WithEvents myButton As Button
Public Sub New()
box = New TextBox()
box.BackColor = System.Drawing.Color.Cyan
box.Size = New Size(100, 100)
box.Location = New Point(50, 50)
box.Text = "Hello"
myButton = New Button()
myButton.Location = New Point(50, 100)
myButton.Text = "Click Me"
AddHandler myButton.Click, AddressOf Me.Button_Click
Controls.Add(box)
Controls.Add(myButton)
End Sub
' The event handler.
Private Sub Button_Click(sender As Object, e As EventArgs) box.BackColor = System.Drawing.Color.Green End Sub
' The STAThreadAttribute indicates that Windows Forms uses the
' single-threaded apartment model.
<STAThreadAttribute()> _
Public Shared Sub Main(args() As String)
Application.Run(New MyForm())
End Sub
End Class
コードのコンパイル方法
上記のコードをファイル (拡張子は C# ファイルの場合は .cs、Visual Basic 2005 の場合は .vb) に保存し、コンパイルし、実行します。たとえば、ソース ファイルの名前が WinEvents.cs (または WinEvents.vb) である場合は、次のコマンドを実行します。
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs
vbc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
実行可能ファイルは、WinEvents.exe という名前になります。