- PR -

handlerが登録済か判定したい

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/09/13
投稿数: 2
投稿日時: 2006-09-13 19:26
はじめまして。
VB で Event Handlerの追加は addhandler xxxx.click , addressof xxxx と しますが.
Event登録が既に登録済か否かの判別は着くのでしょうか



Private Sub KBC1(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("K1")
End Sub
Private Sub KBC2(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("K2")
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
RemoveHandler Button1.Click, AddressOf KBC1
RemoveHandler Button1.Click, AddressOf KBC2
AddHandler Button1.Click, AddressOf KBC1
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
RemoveHandler Button1.Click, AddressOf KBC1
RemoveHandler Button1.Click, AddressOf KBC2
AddHandler Button1.Click, AddressOf KBC2
End Sub


BUTTON2の押下時は Button1.Clickで KBC1を ,
BUTTON3の押下時は Button1.clickで KBC2を Callします.

上記のコードで, Errorにはならず,目的通り実行されるのですが
各Button_CLICK Eventの
RemoveHandler Button1.Click, AddressOf KBC1
RemoveHandler Button1.Click, AddressOf KBC2
が冗長で, Handler無登録状態で, RemoveHanderが走ることになり, 気色悪いです。

if button1.handler登録済 then removehandler button1.click addressof xxxx

ができないものかご相談です.
addressof xxxx の xxxx が確定しないので難しいかも知れません.

よろしくお願いします。




[ メッセージ編集済み 編集者: 未記入 編集日時 2006-09-13 19:27 ]
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-09-13 19:53
>Event登録が既に登録済か否かの判別は着くのでしょうか
つきません。

イベントハンドラを切り替えるのではなく、イベントハンドラの挙動を切り替えれた方がいいです。

コード:
Public Class Form1

	Private switch As Mode = Mode.ModeA

	Private Sub KBC1()
		MsgBox("K1")
	End Sub

	Private Sub KBC2()
		MsgBox("K2")
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		Select Case (switch)
			Case Mode.ModeA
				Me.KBC1()
			Case Mode.ModeB
				Me.KBC2()
		End Select
	End Sub

	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
		Me.switch = Mode.ModeA
	End Sub

	Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
		Me.switch = Mode.ModeB
	End Sub

	Private Enum Mode
		ModeA = 0
		ModeB = 1
	End Enum
End Class

Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-09-13 19:56
無理ですね。

ところで、普通イベントハンドラは初めに一回登録するだけ、と言うのが一般的な使用方法だと思います。
ハンドラ内でフラグ等を見て実際に処理を行うかどうかを判断する方がシンプルで良いと思うのですが。
未記入
会議室デビュー日: 2006/09/13
投稿数: 2
投稿日時: 2006-09-13 20:17
けんじさん、ありがとうございます。
Hongliang さん、ありがとうございます。
 そうですね、無理ですね。
動的にHandlerを脱着させる仕様自体が無理でしたね。
制御フラグでコントロールするように仕様変更します。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)