怎么在vb中动态生成数组控件啊

apple_001 2005-07-18 06:33:02
我需要用到数组控件,现在用如下代码生成了一部分
For i = 1 To 10
Set myLabel(i) = Form1.Controls.Add("vb.Label", "Label" & i & "")
myLabel(i).Left = 100 + 100 * i
myLabel(i).Top = 100 + 500 * i
myLabel(i).Visible = True
myLabel(i).Caption = "我是动态标签" & i
myLabel(i).AutoSize = True
Next
但是我在其后的编程中不知道应该如果调用和对其写代码,对
Private Sub Label1_Click(Index As Integer),Private Sub Label_Click(Index As Integer)等编程都没有反应,这是为什么,我应该怎么写呢。
另不希望用load label(i)的方式添加新控件

对这种方式添加新控件的方式都应该注意什么啊,请高手指教。
...全文
313 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
apple_001 2005-07-20
  • 打赏
  • 举报
回复
恩,myhgyp(也许是这样的,信不信由你)得方法我也测试过了,确实可以对数组控件编程,最早我还在form中自己对按钮的click事件编程,没有反应,后来看了看都在类里面了。大约只能这样了吧,谢谢几位。
Tiger_Zhao 2005-07-20
  • 打赏
  • 举报
回复
除了预先设计一个 Index=0 的 Label,没有其他方法创建可以处理消息的控件数组。
因为不是控件数组,Private Sub Label_Click(Index As Integer) 毫无意义;

因为事件处理过程必须前期绑定,虽然你动态创建的控件名称为 Label1、Label2……,Private Sub Label1_Click(Index As Integer) 依旧无效,除非你用下面的方式
Private Label1 As Label
Private Sub Form_Load()
Set Label1 = Form1.Controls.Add("vb.Label", "Label1")
End Sub
Private Sub Label1_Click(Index As Integer)
……
End Sub

要么老老实实用预先设计的控件数组,要么象 myhgyp(也许是这样的,信不信由你) 那样用类来处理
myhgyp 2005-07-20
  • 打赏
  • 举报
回复
当然可以,不知你想怎么样呢
myhgyp 2005-07-19
  • 打赏
  • 举报
回复
'类模块代码:
Option Explicit

Private WithEvents mvarCmBtn As CommandButton
Dim BtnIndex As Integer
Public Property Set CmBtn(ByVal vData As CommandButton)
Set mvarCmBtn = vData
End Property
Public Property Get CmBtn() As CommandButton

Set CmBtn = mvarCmBtn
End Property

Private Sub mvarCmBtn_Click()
Select Case BtnIndex '返回索引值
Case 0
'do something
Case 1
MsgBox BtnIndex
Case 2
Case Else
End Select
End Sub

Public Property Let LetBtnIndex(p_BtnIndex)
BtnIndex = p_BtnIndex
End Property

'窗体代码:
Option Explicit
Dim a() As Class1

Private Sub Command1_Click()
Me.Controls.Remove Me.Controls("cmdobj3") '删除控件
End Sub

Private Sub Command2_Click()
MsgBox a(0, 0).CmBtn.Value
End Sub

Private Sub Form_Load()
'Check1.Value = True
ReDim a(5, 3)
Dim I As Integer
Dim J As Integer
Dim k As Integer
k = 1
For I = 0 To 5
For J = 0 To 3
Set a(I, J) = New Class1
Set a(I, J).CmBtn = Me.Controls.Add("VB.CommandButton", "cmdObj" & k)
a(I, J).LetBtnIndex = k
a(I, J).CmBtn.Visible = True
a(I, J).CmBtn.Top = J * 500
a(I, J).CmBtn.Left = I * 2000
k = k + 1
Next J
Next I
End Sub
apple_001 2005-07-19
  • 打赏
  • 举报
回复
楼上是用类自己定义了一个类似command的类,然后对其进行赋值等操作,但是能否对生成的控件进行编程呢
lingll 2005-07-19
  • 打赏
  • 举报
回复
load controlname(i)
apple_001 2005-07-19
  • 打赏
  • 举报
回复
那么能不能告诉我对于上面这种模式动态生成的控件,应该如何去调用呢,或者说他们的name什么的的应该是什么呢
lingll 2005-07-19
  • 打赏
  • 举报
回复
无法生成,没必要要求那么高,只要在form上放一个index=0的控件就什么都好办了
apple_001 2005-07-19
  • 打赏
  • 举报
回复
大虾帮帮忙啊
apple_001 2005-07-18
  • 打赏
  • 举报
回复
放在什么地方不是很重要,我上面的代码已经能动态生成label控件了,现在是我不清楚我生成的是不是数组控件,我怎么去访问和调用都访问不到。
wudeqing 2005-07-18
  • 打赏
  • 举报
回复
放到form_active里面呀!
upsuper 2005-07-18
  • 打赏
  • 举报
回复
要求好苛刻~

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧