プログラミングマガジン

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

  • ホーム
  • Visual Basic
  • 【VB.NET/C#】「イベント」について
 
 
     
  • サーバー言語  
    • Ruby
    • Rails
    • PHP
    • Laravel
  •  
  • データ設計  
    • NoSQL
    • SQL
    • RDB設計
    • Oracle
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    •  
    • セキュリティ
    • コンテナ全般
    • Linux
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
    • TypeScript
  •  
  • 設計  
       
    • 実装設計
    •  
    • 認証設計
    • 例外設計
    •  
    • 動画設計
    • DDD
  • 問い合わせ
  

【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
  • コメントを書く
  • C#, VB.NET, Visual Basic
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 01.14

    【Visual Basic】「Meキーワード」とは?

  2. 2019 05.19

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

  3. 2019 01.19

    【Visual Basic】「Shared」について

  4. 2019 01.09

    【Visual Basic】「クラス」について

  5. 2019 01.14

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

  6. 2019 01.16

    【C#】「WCFサービス」や「サービス志向」について

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

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

返信をキャンセルする。

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

【Visual Basic】.NET Framewor…

RETURN TOP

アーカイブ

  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年6月
  • 2019年5月
  • 2019年3月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月

カテゴリー

  • .NET Framework
  • Ajax
  • Android
  • Apache
  • API
  • Auth0
  • AWS
  • Babel
  • Babylon.js
  • Bitbucket
  • BootStrap
  • C#
  • C++
  • CGI
  • CSS
  • Cypress
  • C言語
  • DBスペシャリスト
  • DDD
  • DevOps
  • Django
  • Docker
  • Eclipse
  • Git
  • GitLab
  • GraphQL
  • Heroku
  • HTML
  • HTML5
  • Java
  • JavaScript
  • Javaサーブレット
  • Jekins
  • JIRA
  • jQuery
  • JSP
  • JSTL
  • JUnit
  • Kubernetes
  • Laravel
  • linux
  • Mac
  • Maven
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • OAuth
  • Open ID Connect
  • Oracle
  • OS
  • PHP
  • PL/SQL
  • PostgreSQL
  • PowerShell
  • PWA
  • Python
  • React
  • Redis
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Salesforce
  • Sass
  • SEO
  • Slack
  • SPA
  • Spring Boot
  • Spring Framework
  • Spring MVC
  • SQL
  • Struts
  • Struts2
  • Sublime Text
  • Swagger
  • Tailwind CSS
  • Three.js
  • Tomcat
  • TypeScript
  • UML
  • Unity
  • UX
  • VB.NET
  • Visual Basic
  • VSCode
  • Vue.js
  • WebGL
  • webpack
  • WebRTC
  • WebSocket
  • Webサービス開発
  • Webデザイン
  • Web技術
  • wireshark
  • XD
  • XML
  • インフラ
  • オブジェクト指向
  • クラウド
  • ゲームプランニング
  • ゲーム開発
  • サーバー
  • システム開発
  • スクラム
  • スマホアプリ開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • バージョン管理システム
  • ハードウェア
  • プログラミング全般
  • マルチメディア
  • リファクタリング
  • 人間関係
  • 会計知識
  • 体調管理
  • 副業
  • 動画
  • 国際化
  • 応用情報
  • 情報処理技術者試験
  • 文字コード
  • 日常生活
  • 未分類
  • 業務知識
  • 要件定義
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | Wordpress Thema | @