こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

プログラム実行中に作成したオブジェクトの動作

初めて投稿させていただきます。
現在、コントロール・配列の学習をしていて以下のようなプログラムを作っています。

プログラムを実行するとあるファイルからデータを読み込み、そのデータ数の配列を作成。
データ数分のButtonを作成。
作成したボタンに応じて違った処理を行う。

このときにボタンに応じた処理を行えずに困っています。MSDNなどでは作成したオブジェクトが1個のときの処理(AddHandler~addressOf・・・)はあったのですが、これに引数をつけたり、複数の作成したコントロールに対しての処理が見つかりませんでした。

下に作成途中のサンプルを掲載しますので、ご支援おねがいします
Dim myButton as New new_button() '//ボタンを継承したクラス
Dim Array(5) As String      '//データ格納配列
***データの読み込み(データ数(item_cnt))***
ReDim Preserve Array(item_cnt)

For i = 0 to item_cnt
myButton = new New_button()
myButton.Text = "Button" & i
Me.Controls.Add(myButton)
AddHandler myButton.Click,AddressOf new_click
Next

Private Sub new_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.show("押されたのは" & ○○ & "です")
End sub

ここで押されたボタンごとに処理を変更したいのですが、AddHandlerで引数を付るとエラーが出ます。
もし、読み出し元のプロパティが参照できるのあれば、派生クラスでプロパティを作成、値を入れておき呼び出し元のオブジェクトを参照するっという回避方法もあるかと思いますが、方法がわかりません。
ご存知の方ご教授お願いします

投稿日時 - 2009-09-04 09:58:40

QNo.5261535

すぐに回答ほしいです

質問者が選んだベストアンサー

senderが押されたボタンなので,senderをnew_button型にキャストして使ってください。

senderは「イベントを発生させたオブジェクト」を保持します。
この場合はClickイベントを発生させたオブジェクト,つまりは押されたボタンになります。

投稿日時 - 2009-09-04 12:33:38

お礼

ありがとうございます。
無事に解決しました。
今回はnew_button型でやりましたが、応用すればLabelやTextBoxにも使えそうですね!
ActiveForm.ActiveControlでも似たような処理ができましたが、デバックしながらだとエラーが出てしまい、四苦八苦してました。
本当にありがとうございます

投稿日時 - 2009-09-05 21:48:42

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問