プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • マイクロソフト系技術
  • 【VB.NET/C#】「イベント」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【VB.NET/C#】「イベント」について

01.09

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

イベントとは?

「マウスクリック」や「キーボードのキーが押される」等のアクションをイベントと呼びます。

イベントハンドラとは?

イベントが起きることを監視して、イベントに対応した特別なメソッドのことです。

イベントの仕組み

イベントとイベントハンドラの結びつけのためにデリゲートの仕組みを利用しています。

イベントにおける構文

イベントを発生させる側

イベントの定義

1
Event イベント名

イベントを発生させる

1
RaiseEvent イベント名

イベントを受け取る側

イベントが発生するクラス宣言

プログラム内で使いたいイベントを最初に定義します。

1
WithEvents 変数名 As イベントを持つクラス

イベントを処理するイベントハンドラの定義

イベントを静的に関連付けたい場合

実際にイベントが発生した際に、実行したい処理を記述します。

メソッドに固定でイベントを紐づけることになるので、静的な紐づけとなります。

1
2
[アクセス修飾子] Sub メソッド名 Handles WithEventsで定義した変数名
End Sub

イベントを動的に関連付けたい場合

この記述であれば、プログラム内で必要に応じてイベントとイベントハンドラを状況に応じて関連づけることができます。

また、一つのイベントに対して、複数のイベントハンドラを関連付けることもできます。

1
AddHandler イベント名,AddressOf イベントハンドラ名

サンプル

イベント(リトライ用の共通クラスを作ります。)

1
2
3
4
5
6
7
8
9
10
11
12
Public Class EventRetry
    'イベントの宣言
    Public Event targetMethod()
 
    Public Sub CommonRetry()
        '処理をリトライさせる。
        For i = 0 To 2
            'イベントを発生させる
            RaiseEvent targetMethod()
        Next
    End Sub
End Class

呼び元のクラス(用意したメソッドをリトライさせます。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Module Module1
 
    Sub retry1()
        Console.WriteLine("リトライテスト1")
    End Sub
 
    Sub retry2()
        Console.WriteLine("リトライテスト2")
    End Sub
 
    Sub Main()
        Dim retry As New EventRetry
        'targetMethodイベントに、retry1を動的に結びつける
        AddHandler retry.targetMethod, AddressOf retry1
 
        'TestMethodを実行
        retry.CommonRetry()
 
        'targetMethodイベントに結びついている、retry1を削除
        RemoveHandler retry.targetMethod, AddressOf retry1
 
        'targetMethodイベントに、retry2を動的に結びつける
        AddHandler retry.targetMethod, AddressOf retry2
 
        'Testメソッドを実行
        retry.CommonRetry()
 
        Console.ReadLine()
  End Sub
 
End Module

C#でのイベントの実装

同様のことをC#でやる場合は下記のようになります。

サンプル

呼び出し元のクラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
 
        static void Main(string[] args)
        {
            //イベントが定義されているクラスをインスタンス化する。
            EventRetry retryClass = new EventRetry();
            Program prog = new Program();
 
            //イベントを紐づける。
            retryClass.targetMethod += prog.retry1;
            retryClass.commonRetry();
            //イベントを削除
            retryClass.targetMethod -= prog.retry1;
            //イベントを新たに紐づける。
            retryClass.targetMethod += prog.retry2;
            retryClass.commonRetry();
            Console.ReadKey();
        }
 
        void retry1()
        {
            Console.WriteLine("リトライテスト1");
        }
 
        void retry2()
        {
            Console.WriteLine("リトライテスト2");
        }
    }
}

イベントを定義するクラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class EventRetry
    {
        //イベントを定義する(デリゲート)
        public event Action targetMethod;
 
        public void commonRetry()
        {
            //リトライ
            for (int i = 0; i < 2; i++)
            {
                //イベントを発生させる
                targetMethod();
            }
        }
    }
}

スポンサーリンク
  • 2019 01.09
  • miyabisan2
  • コメントを書く
  • マイクロソフト系技術
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 01.09

    【VB.NET】「デリゲート」について

  2. 2018 06.01

    【PowerShell】デバッグをするには?(Windows PowerShell ISEの使用)

  3. 2019 01.14

    【Visual Studio】「スレッド」について

  4. 2019 06.16

    【C#】データセット(DataSet)の基本

  5. 2019 05.19

    【VB.NET】VB.NETからC++のDLLを呼び出す方法

  6. 2019 03.03

    【マイクロソフト】.NET Framework、マネージドコード、アンマネージドコード

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【VB.NET】「デリゲート」について

【Visual Basic】「クラス」、「Meキーワー…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー