XPでVB.netを勉強中のビギナーです。
コマンドボタンを100個くらい配置し、どのボタンが押されたかを配列変数のように検出(?)する方法を探しています。VB3(だったかな?)時代はフォームに配置したコマンドボタンをコピペすると、勝手に「Command_Button(2)」などと名前が付いて、配列変数のようにボタンを扱えていた気がします。これに相当するものがないか、ビギナー本や過去ログをあさっているのですが、情報を見つけられません。どなたかヒントでもよいのでご教授願います
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200412/04120067.txt
いわゆるVB6のコントロールの配列をVB.NETで作るには、
1、クラスとインスタンス
2、Objectクラスと継承
3、イベントハンドラーとデリゲート
4、明示的なキャストと遅延バインディング
これらの知識が必要になります。
http://www.geocities.jp/hatanero/vbnet.html
ここの5番目に基本的なテンプレートを載せてあります、
フォームには何も置かず、コードを貼り付けて試してみて下さい。
解説はあまり良くありません。そのうち書き換えます。
特攻隊長まるるうさん、早朝からありがとうございます。
特攻隊長まるるうさんの情報をもとに、朝から試行錯誤
してみました。
以下のコードは、ボタンをクリックするとボタンの数字が
増えていくものです。一応動いてくれました。
Dim cbtn(4) As Button 'ボタン配列宣言
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim n As Integer
For n = 0 To 4
cbtn(n) = New Button 'インスタンスの作成
cbtn(n).Parent = Me 'フォームの上に配置
With cbtn(n) 'ボタンの配置
.Location = New Point(10, 30 * n + 10)
.Text = "0"
.Tag = n
End With
'イベントハンドラーの作成
AddHandler cbtn(n).Click, AddressOf Button_Cliked
Next
End Sub
Private Sub Button_Cliked(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Dim btn As Button
btn = DirectCast(sender, Button)
'型変換も未熟です。しかしよくこれで動くな・・・
cbtn(btn.Tag).Text = cbtn(btn.Tag).Text + 1
End Sub
と、試行錯誤しているうちに、ねろさんも大変貴重な
情報を書き込んでくださっていたんですね。
どうもありがとうございました。
教えて頂いたHPはまだ熟読していませんが、理解する
のにしばらくかかりそうなので、先にお礼させて
頂きます。
ねろさんご指摘の1,2,は何となく分かってきた
気がしますし、今回イベントハンドラーのイメージも
少しできてきましたが、その他の点はまだまだ
さっぱりです。
ですが、教えていただいた情報を元にすれば、かなり
理解が進みそうです。
お二人とも、どうもありがとうございました。
ツイート | ![]() |