イベントに対する処理を登録する場合、イベントハンドラを使ってメソッドをイベントに関連づけします。
-------------------------------------------------------
using System;
using System.Windows.Forms;
class WinSample : Form
{
public WinSample()
{
// イベントにメソッドを登録
this.MouseDown += new MouseEventHandler(this.myMouseDown);
}
private void myMouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("マウスがクリックされました");
}
public static void Main()
{
Application.Run(new WinSample());
}
}
-------------------------------------------------------
上記の方法以外に、継承元のクラスが持っている、イベント発生時に動作するprivateなメソッド(Onイベント名)をオーバーライドしてしまうという方法もあります。
-------------------------------------------------------
using System;
using System.Windows.Forms;
class WinSample : Form
{
public WinSample()
{
this.MouseDown += new MouseEventHandler(this.myMouseDown);
}
private void myMouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("マウスがクリックされました");
}
// OnMouseDownメソッドをオーバーライド
protected override void OnMouseDown(MouseEventArgs e)
{
MessageBox.Show("X:" + e.X + " Y:" + e.Y);
}
public static void Main()
{
Application.Run(new WinSample());
}
}
-------------------------------------------------------
このサンプルを動作させると気がつくと思いますが、OnMouseDownをオーバーライドしてしまうと、イベントハンドラを使ってMouseDownに関連付けたメソッドが呼ばれなくなってしまいます。
オーバーライドを利用する際は、基本的には継承元のメソッドを呼び出すようにしたほうがよいでしょう。
継承元のクラスはbaseとして呼び出すことができます。
-------------------------------------------------------
using System;
using System.Windows.Forms;
class WinSample : Form
{
public WinSample()
{
this.MouseDown += new MouseEventHandler(this.myMouseDown);
}
private void myMouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("マウスがクリックされました");
}
protected override void OnMouseDown(MouseEventArgs e)
{
MessageBox.Show("X:" + e.X + " Y:" + e.Y);
// 継承元クラスのOnMouseDownメソッドを呼び出す
base.OnMouseDown(e);
}
public static void Main()
{
Application.Run(new WinSample());
}
}
-------------------------------------------------------
あおい情報システム株式会社 小野修司(どっとねっとふぁん)