注册 登录
编程论坛 VB6论坛

[求助] 如何循环Text1到Text17创建多个数组控件?

sblisb 发布于 2018-09-19 17:02, 2988 次点击
我在窗体上创建了Text1(00到Text17(0)17个文本框,单个文本框动态创建我会了,用如下代码

For i = 1 To 26
    Load Text1(i) ' 这句是关键,,,,,
            Text1(i).Top = Text1(i - 1).Top + Text1(i - 1).Height + 200
             Text1(i).Visible = True
    Next
可如何把17个文本框都创建26个数组控件呢?能再加个循环从1-17吗?还是只能一个个写?

[此贴子已经被作者于2018-9-19 23:09编辑过]

9 回复
#2
wube2018-09-19 17:21
文本框有index可用吧?

Text1(0) ... Text1(17)
#3
sblisb2018-09-19 18:04
以下是引用wube在2018-9-19 17:21:26的发言:

文本框有index可用吧?

Text1(0) ... Text1(17)

我的意思是Text1(0) ... Text1(26),我用如上代码创建了26个
而Text2(0)...Text(26)如何创建
总共有17个text要创建,每个都要26个
#4
wube2018-09-19 18:14
http://level168.

這個方法必需先建立一個要動態產生的控制項,並將index設成0,然後就可以由程式來動態建立控制項陣列了。

1.在form1建立一個Text1的控制項,將屬性Index設為0,此控制項變成控制項陣列0。

2.利用Load 控制項(index)的方式來建立控制項。

For Example:

在Form_Load中輸入以下程式:

For i = 1 To 10
Load Text1(i)
Set Text1(i).Container = Form1
Text1(i).Left = i * 1000 + 2000
Text1(i).Top = 1500
Text1(i).Text = i
Text1(i).Visible = True
Next i

這樣便會在Form1建立十個text1控制項陣列,加上第一個原本就建立的總共是十一個。

若要使用events來控制,可以輸入以下的程式:

Private Sub Text1_change(Index As Integer)
Select Case Index

Case 0

MsgBox (”The text in the first TextBox has changed”)

Case 1

MsgBox (”The text in the second TextBox has changed”)

Case 2

MsgBox (”The text in the third TextBox has changed”)

End Select
End Sub
程式可以利用控制項的index來做處理。

來源:http://3ck.
#5
wube2018-09-19 18:16
网路上找的关键字“动态创建控制项阵列VB6”
#6
ZHRXJR2018-09-19 18:18
程序代码:
For i = 1 To 26
    Load Text1(i):Load Text2(i):Load Text3(i):Load Text4(i)....Load Text16(i):Load Text17(i)    '同时加载 Text1(i) 到 Text17(i) 的控件。
    Text1(i).Top = Text1(i - 1).Top + Text1(i - 1).Height + 200   '距上边界距离,不可缺少,不然控件将重合了,只能看到一个控件
    Text1(i).Left = Text1(i - 1).Left + Text1(i - 1).Width + 100   '距左边界距离,不可缺少,不然控件将重合了,只能看到一个控件
    Text1(i).Visible = True
    'Text1(i) 到 Text17(i) 的上边界与左边界距离设置同样不能缺少!!!
    'Text1(i) 到 Text17(i) 的 Visible 属性为 True 的设置同样不能缺少!!!
Next i

#7
风吹过b2018-09-19 19:19
不同标识符的控件数组,需要写不同的代码段。
可以自己封装一个函数,负责加载控件,每次把控件名传递进去。

程序代码:
Public Sub addtextbox(tb As Object)
'经测试,只有 object 类型才能接受控件数组做为参数
Dim I As Long
'循环体代码照你的抄的
For I = 1 To 26
    Load tb(I) ' 这句是关键,,,,,
    tb(I).Top = tb(I - 1).Top + tb(I - 1).Height + 200
    tb(I).Visible = True
Next
End Sub


调用代码,有几组控件,就要写几个,这里写了二行
Call addtextbox(Text1())
Call addtextbox(Text2())



[此贴子已经被作者于2018-9-19 19:27编辑过]

#8
sblisb2018-09-19 20:42
以下是引用风吹过b在2018-9-19 19:19:36的发言:

不同标识符的控件数组,需要写不同的代码段。
可以自己封装一个函数,负责加载控件,每次把控件名传递进去。

Public Sub addtextbox(tb As Object)
'经测试,只有 object 类型才能接受控件数组做为参数
Dim I As Long
'循环体代码照你的抄的
For I = 1 To 26
    Load tb(I) ' 这句是关键,,,,,
    tb(I).Top = tb(I - 1).Top + tb(I - 1).Height + 200
    tb(I).Visible = True
Next
End Sub


调用代码,有几组控件,就要写几个,这里写了二行
Call addtextbox(Text1())
Call addtextbox(Text2())

代码停在
Load tb(I)
提示
实时错误'344',
必须为对象数组指定索引

怎么办?
#9
ZHRXJR2018-09-19 21:59
代码停在
Load tb(I)
提示
实时错误'344',
必须为对象数组指定索引

回复 8楼 sblisb
我测试了一下 7 楼 风吹过b 的代码,没有问题。
稍稍修改了一下:
程序代码:
Public Sub addtextbox(tb As Object)
Dim I As Long
For I = 1 To 26
    Load tb(I)
    tb(I).Top = tb(I - 1).Top    '同一个数组控件离上边界距离应该是一样的
    tb(I).Left = tb(I - 1).Left + tb(I - 1).Width + 100   '同一个数组控件排列在同一行
    tb(I).Visible = True
Next
End Sub

你出现的问题估计是你没有对有些  Text 控件分配下标,即放置在窗体的有的控件没有设置 Index 的值为 0 的原因吧。

楼主 sblisb
既然问题已经解决,为什么不结贴!


[此贴子已经被作者于2018-9-26 19:16编辑过]

#10
sblisb2018-09-19 23:07
以下是引用ZHRXJR在2018-9-19 21:59:58的发言:


回复 8楼 sblisb
我测试了一下 7 楼 风吹过b 的代码,没有问题。
稍稍修改了一下:
Public Sub addtextbox(tb As Object)
Dim I As Long
For I = 1 To 26
    Load tb(I)
    tb(I).Top = tb(I - 1).Top    '同一个数组控件离上边界距离应该是一样的
    tb(I).Left = tb(I - 1).Left + tb(I - 1).Width + 100   '同一个数组控件排列在同一行
    tb(I).Visible = True
Next
End Sub
你出现的问题估计是你没有对有些  Text 控件分配下标,即放置在窗体的有的控件没有设置 Index 的值为 0 的原因吧。

谢谢,确实是有一个控件没设置index值

谢谢二位版主

1