プログラムでボタンを連続して作成し、そのボタンの値を得たいのですが方法がわかりません。ぜひ、アドバイスお願いします。
プログラムはこちらです。
For Each fname In My.Computer.FileSystem.GetFiles(myfolder)
'Dim myfolder2 As String = fname
fname2(i) = fname
folder = fname.Split("\")
bt(i) = New Button
bt(i).Left = 250
bt(i).Width = 200
bt(i).Top = y
bt(i).TextAlign = ContentAlignment.MiddleLeft
bt(i).Tag = i
'bt(i).Text = folder(0)
bt(i).BackColor = Color.Pink
bt(i).Text = folder(2)
bt(i).PerformClick()
Controls.Add(bt(i))
AddHandler bt(i).Click, AddressOf buttons_click2
y += 25
x += 1
Next
このプログラムでは、全てのボタンを表示してしまうため、ボタンをクリックしたときボタンは何番目なのかやボタンに表示してあるテキストが何なのかがわかりません。
ボタンをクリックしたときに何番目のボタンで表示してあるテキストが何かを得るにはどうしたらよいのでしょうか?
イベント引数の sender As Object というのが、
「Click イベントの対象になっているボタン」を表します。
ですから今回の場合は、Click イベント側で
Dim btn As Button = DirectCast(sender, Button)
Dim index As Object = btn.Tag
Dim caption As String = btn.Text
のように処理できるかと。
教えていただきありがとうございます。
早速行ってみたのですが、form1の初めに
Public index as Object
Public caption as String
を宣言し、
Dim btn As Button = DirectCast(sender, Button)
index = btn.Tag
caption = btn.Text
を書き、form2で
Dim caption as String = form1.caption
と書き実行してみたのですが上手く出来ず、messageboxでcaptionを表示してみたら、空白?空欄みたいになっていたのですが、どのようにしたら、よいのでしょうか?
参考になると思います
コントロールの配列を作成する
http://jeanne.wankuma.com/tips/control/arraycontrol.html
ありがとうございます。
早速参考にして作成してみたいと思います。
また、分からないことや上手く行かないとことがありましたら、アドバイスよろしくお願いします。
>Dim caption as String = form1.caption
は、まずいのでは?
captionは予約語ですから、変数として指定するのはよろしくないと思われます
それと、ボタンの文字を得たいとおっしゃっていますが、何故FormのCaptionを得ようとしているのでしょうか?
ツイート | ![]() |