C#でイベントハンドラを追加する方法

C#でイベントハンドラを追加する方法をご紹介します。

条件

  • Visual Studio 2017

前提

以下のように、フォームにボタンを配置しているものとします。

実装

プロパティによる設定

クリックイベントの場合、デザイン画面において、対象のコンポーネントをダブルクリックすることで自動的にソース生成&イベントへの設定が行われます。

ソース

以下は、button1をダブルクリックした段階で生成されたソースです。
private void button1_Click(object sender, EventArgs e)が自動生成されました。

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

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

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}

プロパティ設定

デザイン画面において、button1のプロパティでイベントを確認すると、アクション > Clickに「button1_Click」が指定されていることがわかります。

ソース

クリックイベントのメソッド内に処理を記述することで、クリック時に記述した処理を実行することが出来ます。
以下では、button1をクリックした際、メッセージボックスを表示しています。

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

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

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("ボタン1がクリックされました!");
        }
    }
}

実行結果

コードへの追加

デザイン画面のプロパティ設定を行わずとも、コードに記述することでコンポーネントにイベントハンドラを追加することが出来ます。

クリックイベント

プロパティ設定

以下では、button1のプロパティでイベントを確認すると、アクション > Clickに何も指定していない状態です。

ソース

フォームの初期処理で、button1のクリックイベントハンドラを追加します。

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

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

            button1.Click += new EventHandler(button1_Click); // クリックイベントハンドラを追加
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("ボタン1がクリックされました!");
        }
    }
}
実行結果

このような実装でも、プロパティでイベントを設定した場合と同様の動作となります。

マウスイベント

マウスイベントも同様に追加することが出来ます。

ソース
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

            button1.Click += new EventHandler(button1_Click); // クリックイベントハンドラを追加
            button1.MouseMove += new MouseEventHandler(button1_MouseMove); // マウスイベントハンドラを追加
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("ボタン1がクリックされました!");
        }

        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            MessageBox.Show("ボタン1上でカーソルが移動しました!");
        }
    }
}
実行結果

参考

コードでイベントにイベントハンドラを追加する (C#プログラミング)

https://www.ipentec.com/document/csharp-add-event-handler-by-code

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です