プログラムで作成したボタンの値を得るには


  2007-12-18 02:40:14  No: 138423

プログラムでボタンを連続して作成し、そのボタンの値を得たいのですが方法がわかりません。ぜひ、アドバイスお願いします。

プログラムはこちらです。

 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

このプログラムでは、全てのボタンを表示してしまうため、ボタンをクリックしたときボタンは何番目なのかやボタンに表示してあるテキストが何なのかがわかりません。
ボタンをクリックしたときに何番目のボタンで表示してあるテキストが何かを得るにはどうしたらよいのでしょうか?


魔界の仮面弁士  2007-12-18 03:25:46  No: 138424

イベント引数の sender As Object というのが、
「Click イベントの対象になっているボタン」を表します。

ですから今回の場合は、Click イベント側で
  Dim btn As Button = DirectCast(sender, Button)
  Dim index As Object = btn.Tag
  Dim caption As String = btn.Text
のように処理できるかと。


K  2007-12-18 18:43:30  No: 138425

教えていただきありがとうございます。
早速行ってみたのですが、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を表示してみたら、空白?空欄みたいになっていたのですが、どのようにしたら、よいのでしょうか?


ふく  2007-12-18 20:15:34  No: 138426

参考になると思います

コントロールの配列を作成する
http://jeanne.wankuma.com/tips/control/arraycontrol.html


K  2007-12-18 20:22:01  No: 138427

ありがとうございます。
早速参考にして作成してみたいと思います。
また、分からないことや上手く行かないとことがありましたら、アドバイスよろしくお願いします。


通ってみた  2007-12-18 22:03:59  No: 138428

>Dim caption as String = form1.caption

は、まずいのでは?
captionは予約語ですから、変数として指定するのはよろしくないと思われます

それと、ボタンの文字を得たいとおっしゃっていますが、何故FormのCaptionを得ようとしているのでしょうか?


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




  


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