複数のボタンを配列変数のように扱うには?

解決


VB3時代のビギナー  2005-02-13 09:38:40  No: 119581

XPでVB.netを勉強中のビギナーです。
コマンドボタンを100個くらい配置し、どのボタンが押されたかを配列変数のように検出(?)する方法を探しています。VB3(だったかな?)時代はフォームに配置したコマンドボタンをコピペすると、勝手に「Command_Button(2)」などと名前が付いて、配列変数のようにボタンを扱えていた気がします。これに相当するものがないか、ビギナー本や過去ログをあさっているのですが、情報を見つけられません。どなたかヒントでもよいのでご教授願います


特攻隊長まるるう  2005-02-13 15:36:35  No: 119582

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200412/04120067.txt


ねろ  URL  2005-02-13 20:07:18  No: 119583

いわゆるVB6のコントロールの配列をVB.NETで作るには、
1、クラスとインスタンス
2、Objectクラスと継承
3、イベントハンドラーとデリゲート
4、明示的なキャストと遅延バインディング
これらの知識が必要になります。
http://www.geocities.jp/hatanero/vbnet.html
ここの5番目に基本的なテンプレートを載せてあります、
フォームには何も置かず、コードを貼り付けて試してみて下さい。
解説はあまり良くありません。そのうち書き換えます。


VB3時代のビギナー  2005-02-13 22:13:39  No: 119584

特攻隊長まるるうさん、早朝からありがとうございます。
特攻隊長まるるうさんの情報をもとに、朝から試行錯誤
してみました。
以下のコードは、ボタンをクリックするとボタンの数字が
増えていくものです。一応動いてくれました。

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,は何となく分かってきた
気がしますし、今回イベントハンドラーのイメージも
少しできてきましたが、その他の点はまだまだ
さっぱりです。
ですが、教えていただいた情報を元にすれば、かなり
理解が進みそうです。

お二人とも、どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加