とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 -

お勉強します。今回はイベントとデリゲート。しかしなんとなくわかる程度に(ぉ

「イベントって?会場はどこ?」だったり「デリゲートって繊細なことぢゃね?」って感じの私のためにがんばります。

本来デリゲートを理解してからイベントの理解なのかもしれませんが、やっぱり身近なのはイベントですよね?なのでイベントからお勉強していきます。


「イベントってたとえば何?」って聞かれると、Button クラスの Click イベントが頭に浮かびます。以下のようなコードはドコかしらで見かけたことがあります。

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

    End Sub

ボタンがクリックされたというイベントが発生した時に実行するコードを記述するというわけですね。


ではまず上記のコードの理解から・・・て、ノン!ノン!じゃにーさんもきっとこう言うと思います。


「ユー、イベントの流れ的にやっちゃいなよ。」


それもそうですね、発生した後のことからやるってのは順番がおかしいです。イベントってのがどっかにあってそれが発生して~って感じですもん。

というわけで、イベントの流れに沿っていきます。


ではでは、イベントの宣言から逝きます。イベントがないと話が進みませんもんね。ネタとして以下のようなクラスを用意しますた。

Option Compare Binary
Option Explicit On
Option Strict On
Imports System
Public Class WankumaMember

    Private _displayName As String
    Public Property DisplayName() As String
        Get
            Return Me._displayName
        End Get
        Set(ByVal value As String)
            Me._displayName = value
        End Set
    End Property

End Class

わんくまはIDは固定ですが、ブログなどに表示する名前は任意ですよね。なので、DisplayName プロパティは変更可能にしています。

さて、このDisplayName プロパティが変更されたときにイベントを発生して「変更されたよ~。」って通知することを目指します。

イベントを宣言するには Event ステートメント を使用します。

イベントの宣言方法にはいくつかあります。デリゲートの時にこのあたりは再度書くことになりそうですが、今回は一番見た目がシンプルな形の以下の記述を使用します。DisplayName プロパティが変更されたときに発生させるイベントを DisplayNameChanged イベントとすると、たとえば以下のようになります。

Public Event DisplayNameChanged(ByVal sender As ObjectByVal e As EventArgs)

イベントの発生元を伝えるための sender と、イベント データを格納する e という引数のシグニチャを持ったDisplayNameChanged イベントです。ちなみにVisual Basicでは、イベントに戻り値、省略可能な引数、引数 ParamArray を指定できません。

ふぅ、これでイベントの宣言は終わりです。


あとはこのイベントを発生させられればOKですね。

イベントの発生には RaiseEvent ステートメントを使用します。今回は余計な事は考えないようにするためにDisplayName プロパティに対して値が設定されたら常に変更されたと考えることにし、イベントの発生もプロパティ内で行うことにします。RaiseEvent ステートメントを使用してイベントを発生させるように変更したDisplayName プロパティは以下のようになります。

    Public Property DisplayName() As String
        Get
            Return Me._displayName
        End Get
        Set(ByVal value As String)
            Me._displayName = value
            RaiseEvent DisplayNameChanged(MeNew EventArgs)
        End Set
    End Property

DisplayNameChanged イベント のシグニチャに従い、sender には自身のインスタンスを、e にはデータを持たない 新しい EventArgs クラスを設定しています。


これらの記述を加えた WankumaMember クラスは以下のようになります。

Option Compare Binary
Option Explicit On
Option Strict On
Imports System
Public Class WankumaMember

    Public Event DisplayNameChanged(ByVal sender As ObjectByVal e As EventArgs)

    Private _displayName As String
    Public Property DisplayName() As String
        Get
            Return _displayName
        End Get
        Set(ByVal value As String)
            _displayName = value
            RaiseEvent DisplayNameChanged(MeNew EventArgs)
        End Set
    End Property

End Class


さて、これで ごくごく簡単な DisplayNameChanged イベントの宣言と発生は終わりです。次回はこのイベントによる通知を受け取る方法についてお勉強する予定です。

投稿日時 : 2007年10月23日 11:45

Feedback

# re: Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 - 2007/10/23 13:00 Streetw☆

仕事速いですね~
本題とは関係ないし、どっちでもいい話ですけど、
私はNew EventArgsより
EventArgs.Empty
の方が好きです。

>Visual Basicでは、イベントに戻り値・・・を指定できません。
他の言語ではできるんですか?

# re: Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 - 2007/10/23 13:20 まどか

本題とは関係なく細かいですが、

If _displayName <> value Then
_displayName = value
RaiseEvent DisplayNameChanged(Me, New EventArgs)
End If

としたほうがよいかも。
逆に無変更でも発生するという性質のものもあるでしょうね。

> 私はNew EventArgsより
> EventArgs.Empty

最近知って使い始めたというのは秘密。
Frameworkが巨大なので、「こんなんあったんかぁ」というのはよくありますね。

# re: Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 - 2007/10/23 14:03 Mr.T

Mr.Tです、こんにちは。

>今回は余計な事は考えないようにするためにDisplayName プロパティに対して値が設定されたら常に変更されたと考えることにし

この部分があるので、あえてそうしているのだと思います。
いや、実は私も突っ込もうとしてやめたクチなのでw

# re: Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 - 2007/10/23 15:56 まどか

読んでなかったよ。

# re: Visual Basic でなんとなくイベントとデリゲート その1。 - イベントの宣言と発生 - 2007/10/23 20:05 とりこびと

コメントありがとうございます。

>>Streetw☆さん

>仕事速いですね~

ただ、書いただけですからw

>私はNew EventArgsより
>EventArgs.Empty
>の方が好きです。

Empty ってついているほうが可読性が上がる気もしますね~。

>>Visual Basicでは、イベントに戻り値・・・を指定できません。
>他の言語ではできるんですか?

わかりませんw(ぉ


>>まどかさん

>本題とは関係なく細かいですが、

ゼッタイつっこまれると思って本文中に書いておいたのにそれでいてなおつっこまれる私って・・・。orz

>読んでなかったよ。

正直泣いた。

>>Mr.Tさん

>Mr.Tです、こんにちは。

こんにちは♪

>>今回は余計な事は考えないようにするためにDisplayName プロパティに対して値が設定されたら常に変更されたと考えることにし

>この部分があるので、あえてそうしているのだと思います。
>いや、実は私も突っ込もうとしてやめたクチなのでw

みんなしてなんなんですかwwwwwwww

# Visual Basic でなんとなくイベントとデリゲート その2。 - イベント ハンドラ - 2007/10/24 9:01 とりこびと ぶろぐ。

Visual Basic でなんとなくイベントとデリゲート その2。 - イベント ハンドラ -

# Visual Basic でなんとなくイベントとデリゲート その3。 - イベントに関連することをちょっとだけ追記。 - 2007/10/24 11:40 とりこびと ぶろぐ。

Visual Basic でなんとなくイベントとデリゲート その3。 - イベントに関連することをちょっとだけ追記。 -

# Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? - 2007/11/08 11:43 とりこらぼ。

Visual Basic でなんとなくイベントとデリゲート その9。 - イベントとデリゲートの絡み加減は? -

# mHZzXLEuzOFGjRNJYO 2011/09/29 3:15 http://oemfinder.com

FT28GD Hi! Everyone who reads this blog - Happy Reconciliation and Accord..!

# iyHuggEdKYqM 2011/10/21 22:04 http://www.epotenzmittel.com/

Thanks:) Cool topic, write more often! You manage with it perfctly:D

# cOGabYjknTY 2011/11/02 5:25 http://www.pharmaciecambier.com/

Hi! Everyone who reads this blog - Happy Reconciliation and Accord..!

# FzLPdtTSpPuubRJY 2011/11/02 6:20 http://optclinic.com/

It's straight to the point! You could not tell in other words! :D

# GXGZPMqdnLTyWKp 2011/11/09 6:40 http://www.farmaciaunica.com/

Received the letter. I agree to exchange the articles.

# zUFOVVJoBBzoWH 2011/11/16 2:56 http://circalighting.com/category.aspx?cid=1

Fresh thoughts, fresh view on the subject..!

# izLWukpYQqCg 2011/11/16 3:36 http://catalinabiosolutions.com

Not bad post, leave it at my bookmarks!...

タイトル
名前
Url
コメント