- ベストアンサー
.NETで動的にボタンイベントを生成する方法
TextBoxに入力された値の数だけ ボタンを生成したいのですが、 配列(ArrayList)にオブジェクト名を追加し、 For Eachで全件処理をしてもボタンのオブジェクト 名がうまく宣言できず生成したボタンに対し、 色の設定ができません。 .NETのバージョンは2003で、Frameworkのバージョンが1.0です。 良い解決方法があれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんばんは。 動的にコントロールを配置する http://vbdotnet.fc2web.com/vbnet/control/Control01.htm 参考にどうぞ。
その他の回答 (3)
こんばんは。 私の単純なミスですね。 Me.btnArray = New System.Windows.Forms.TextBox(Num) {} ↓ Me.btnArray = New System.Windows.Forms.Button(Num) {} としてください。 ですが、これくらいの間違いは気づいて欲しいです。 Buttonを作るのだから、TextBoxだとおかしいと。 エラーメッセージを見ても分かりそうに思うのですが。
No.2ですがミスがありましアタので訂正です。 >Me. = New System.Windows.Forms.TextBox(Num) {} ↓ Me.btnArray = New System.Windows.Forms.TextBox(Num) {} としてください。
補足
返信ありがとうございます。 わかりずらい文章で申し訳ないです。 解釈としてはそのとおりです。 New System.Windows.Forms.TextBox(Num) {} この部分で 'System.Windows.Forms.TextBox'は'System.Windows.Forms.Button'から派生していない、 型'System.Windows.Forms.TextBoxの一次元配列'の値を'System.Windows.Forms.Buttonの一次元配列'に変換できません というエラーが出るのですがどうしたらいいですか
質問の意味がよく分かりませんが、参考URLだとあらかじめ10個としているので、これをTextBoxに入力去れ炊かずにしたいと言うことでいいでしょうか。 まず >Private btnArray(9) As Windows.Forms.Button ↓ Private btnArray() As Windows.Forms.Button としてください。 サンプルではフォームのLoadイベントで行っていますが、TextBoxに入力してから行うためにTextBoxのValidatingイベントで行います。 Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As _ System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating '数値以外の入力はやり直し If IsNumeric(TextBox1.Text) = False Then e.Cancel = True Exit Sub End If Dim I As Integer Dim Num As Integer = Cint(Me.TextBox1.Text) - 1 Me. = New System.Windows.Forms.TextBox(Num) {} For I = 0 To Num '2-1)インスタンスを作成 btnArray(I) = New Windows.Forms.Button '2-2)配置位置を設定 btnArray(I).Location = New Point(10, 10 + 20 * I + 2) '2-3)Nameプロパティを設定 btnArray(I).Name = "Button" & I.ToString '2-4)サイズを設定 btnArray(I).Size = New System.Drawing.Size(100, 20) '2-5)TabIndexを設定 btnArray(I).TabIndex = I + 1 '2-6)ボタンテキストを設定 btnArray(I).Text = "ボタン" & I.ToString '2-7)イベントハンドラの登録 AddHandler btnArray(I).Click, AddressOf ButtonClick '2-8)フォームに配置 Me.Controls.Add(btnArray(I)) Next End Sub 試してませんがこんな感じでしょうか。
お礼
ありがとうございます。 大変、参考になりました。
補足
回答ありがとうござます。 続けての質問申し訳ありませんが、 サンプルソースの部分の Private btnArray(9) As Windows.Forms.Button この部分をローカル(Form_Loadなど)で行いたいのですが、またそれが出来ない場合、この部分を動的に宣言することは出来ますか