コントロールの動的追加にてテキストボックスを配列で追加するとオブジェクト名が不正のエラーが出ます。配列にしなければエラーにならないのですが。
Private Sub Command1_Click()
Set oText = Controls.Add("VB.TextBox", "txtHello(0)")
With oText
.Left = 200
.Top = 100
.Width = 2000
.Height = 400
.Text = "Hello World!"
.Visible = True
End With
End Sub
識別名に「(」や「)」を含めることはできません。
半角のアルファベット・数字・アンダーバーで命名してください。
(ただし、1文字目数字は不可)
●よい例
txtHello0
txtHello_0
●わるい例
txtHello(0)
txtHello-0
0txtHello
配列の動的追加は出来ないと思いますが
編集 削除ご回答ありがとうございます。
txtHello0 エラーにならないのですが、配列として対応させたいのですが。
コントロール配列を動的に作成する場合は、Loadステートメントを使ってください。
Controls.Addでは、「コントロール配列」を作成することはできません。
(コントロールを作成し、それを配列に入れる事ならば可能ですが)
Visual Basic 初心者掲示板
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi
の
「イsetで追加したものをクリックでイベントを発生させるにはどうすればいいのでしょうか?」
「control.add 変数のついて」
を参照してください。
コントロール配列は、魔界の仮面弁士さんが仰るとおり、Loadステートメントで作成できます。
サンプルを載せています。参考になれば、利用してください。
<フォーム>
テキストボックス(Text1(0))を貼り付けてください。
(インデックスを指定していないと、動的追加はできません。)
コマンドボタン(Command1)を貼り付けてください。
<コード>
以下のコードを貼り付けてください。
Private Sub Command1_Click()
Unload Text1(1)
End Sub
Private Sub Form_Load()
Load Text1(1)
With Text1(1)
.Left = 500
.Top = 1000
.Visible = True
End With
End Sub
フォームロード時に、Text1(1)が新たに作成されます。
コマンドボタンをクリックすると、動的に作成したText1(1)がアンロードされます。
因みに、デザイン時で作成したText1(0)をアンロードできないので注意してください。
吉野様サンプルありがとうございました。
理解できました。