C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: VB.NET と C#でのイベントハンドル登録方法の違い


(過去ログ 39 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■20444 / inTopicNo.1)  VB.NET と C#でのイベントハンドル登録方法の違い
  
□投稿者/ じゅで (30回)-(2008/06/10(Tue) 17:42:03)

分類:[C#] 

じゅでです。
いつもお世話になっております。

今回お聞きしたいのは、イベントの登録方法についてです。

C#では、今現在以下のような形でイベントの登録・削除を行っております。

[Category("Hoge"), Description("ぼたん1くりっく")]
public event EventHandler Button1
{
add { this.button1.Click += value; }
remove { this.button1.Click -= value; }
}

ユーザコントロール上に存在するボタンに対して、フォーム側で中身の実装をするのに
上記のような方法をしようしております。
(手抜きです。senderに対して、ユーザコントロールのボタンなどが、フォーム側では取れます。)

さて、ここで問題になっているのが、VB.NETにこのコードを移し変える方法です。

<System.ComponentModel.Category("hoge"), System.ComponentModel.Description("ボタン1クリックだよ。")> _
Public Event Button1 As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler me.Button1.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler me.Button1.Click, value
End RemoveHandler
End Event

上のようなイメージになるのかとも思っていたのですが、
どうにも構文エラーで煮詰まっております。

AddHandlerでエラーが起こっているのですが、
どうしたら、上に書いてあるC#と同様の事を行うような、プログラムがVB.NETで組めますか?

お分かりになる方がいらっしゃいましたら、ご回答よろしくお願い致します。

以上


引用返信 編集キー/
■20445 / inTopicNo.2)  Re[1]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ 鶏唐揚 (186回)-(2008/06/10(Tue) 17:50:01)
2008/06/10(Tue) 17:55:21 編集(投稿者)

No20444 (じゅで さん) に返信

AddHandler イベント名, AddressOf イベント用メソッド名

という感じです。例えばButton1のクリックにTest1メソッドを登録したい場合は

AddHandler Button1.ClickEvent, AddressOf Test1

です。

#実行時に動的にイベント登録・削除したいってことですよね?
 もしコーディング時のコントロールのイベント登録だったらごめんなさい
引用返信 編集キー/
■20451 / inTopicNo.3)  Re[2]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ じゅで (31回)-(2008/06/10(Tue) 18:32:49)
No20445 (鶏唐揚 さん) に返信
> AddHandler Button1.ClickEvent, AddressOf Test1
> #実行時に動的にイベント登録・削除したいってことですよね?
>  もしコーディング時のコントロールのイベント登録だったらごめんなさい

返信ありがとうございます。

実は、コントロールのイベント登録側です。

そして、自己解決しました。

以下のような形になりました。

<System.ComponentModel.Category("hoge"), System.ComponentModel.Description("ボタン1クリックだよ。")> _
Public Custom Event Button1Click As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler Me.Button1.Click, value
End AddHandler

RemoveHandler(ByVal value As EventHandler)
RemoveHandler Me.Button1.Click, value
End RemoveHandler

RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)

End RaiseEvent
End Event

ところで、ユーザコントロールのボタンクリックイベントなどをこのような形で
登録するのは、あまりしませんか?

引用返信 編集キー/
■20452 / inTopicNo.4)  Re[3]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ 鶏唐揚 (187回)-(2008/06/10(Tue) 18:39:21)
No20451 (じゅで さん) に返信
あぁ、ユーザコントロールを作る側の話でしたか…どえらい勘違い^^;
Custom Eventは使ったことないので結局お力になれず申し訳なく…orz


#解決したようですが、解決済みチェックがついてないので私もつけずにおきます
引用返信 編集キー/
■20459 / inTopicNo.5)  Re[3]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ Hongliang (274回)-(2008/06/10(Tue) 19:55:17)
一般的にはこうするんじゃないかな……。
' コンパイルしてないので記述ミスがあるかも
' 細かいのは略
Public Event Button1Click As EventHandler
Private WithEvents button1 As New Button1
Private Sub OnButton1Click(sender As Object, e As EventArgs) Handles button1.Click
    Me.OnButton1Click(e)
End Sub
Protected Overridable Sub OnButton1Click(e As EventArgs)
    RaiseEvent Me.Button1Click(Me, e)
End Sub

引用返信 編集キー/
■20473 / inTopicNo.6)  Re[4]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ じゅで (32回)-(2008/06/11(Wed) 01:27:42)
2008/06/11(Wed) 15:29:47 編集(投稿者)
2008/06/11(Wed) 15:29:43 編集(投稿者)

ご返信ありがとうございます。

No20459 (Hongliang さん) に返信
> 一般的にはこうするんじゃないかな……。
> ' コンパイルしてないので記述ミスがあるかも
> ' 細かいのは略
> Public Event Button1Click As EventHandler
> Private WithEvents button1 As New Button1
> Private Sub OnButton1Click(sender As Object, e As EventArgs) Handles button1.Click
> Me.OnButton1Click(e)
> End Sub
> Protected Overridable Sub OnButton1Click(e As EventArgs)
> RaiseEvent Me.Button1Click(Me, e)
> End Sub

やっぱり、自分自身のコントロールをsender側に置き換えて、イベントを追加しますか。
すいません、手抜きですorz
直接ハンドルを登録してしまった方が楽でしたので・・・

解決済みのチェックが入っていないのは、こういった話を参考にしたかったので、
入れておりませんでした。
もう少しだけ、解決済みにチェックを入れません。

# そろそろしめます。
# 皆様ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -