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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.20444 の関連記事表示

<< 0 >>
■20444  VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ じゅで -(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で組めますか?

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

    以上

親記事 /過去ログ39より / 関連記事表示
削除チェック/

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

    No20444 (じゅで さん) に返信

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

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

    AddHandler Button1.ClickEvent, AddressOf Test1

    です。

    #実行時に動的にイベント登録・削除したいってことですよね?
     もしコーディング時のコントロールのイベント登録だったらごめんなさい
記事No.20444 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20451  Re[2]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ じゅで -(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

    ところで、ユーザコントロールのボタンクリックイベントなどをこのような形で
    登録するのは、あまりしませんか?
記事No.20444 のレス /過去ログ39より / 関連記事表示
削除チェック/

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


    #解決したようですが、解決済みチェックがついてないので私もつけずにおきます
記事No.20444 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20459  Re[3]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ Hongliang -(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
記事No.20444 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20473  Re[4]: VB.NET と C#でのイベントハンドル登録方法の違い
□投稿者/ じゅで -(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
    直接ハンドルを登録してしまった方が楽でしたので・・・

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

    # そろそろしめます。
    # 皆様ありがとうございました。
記事No.20444 のレス / END /過去ログ39より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -