怎样动态创建控件数组?

okey 2002-04-26 01:08:28
怎样动态创建控件数组?
比如说:我想点一下Cmd_AddNewControl 时
创建一个checkbox控件Check_okey,当再次点击时,则创建的是Check_okey控件数组?
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyu1221 2002-04-26
  • 打赏
  • 举报
回复
'可以通过WINAPI来实现,CreateWindowEx用于建立CHECKBOX,DestroyWindow用于删除CHECKBOX,MoveWindow 可以调整位置,IsDlgButtonChecked可以用来测试是否被选中:
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Const BS_AUTOCHECKBOX = &H3&
Private Const WS_VISIBLE = &H10000000
Private Const WS_CHILD = &H40000000

Const CHECK_BASE_ID = 100
Dim m_hWnd(1 To 5) As Long

Private Sub cmdADD_Click()
Dim hwnd As Long
Dim T(1 To 5) As String
T(1) = "TEST1": T(2) = "TEST2": T(3) = "TEST3": T(4) = "TEST4": T(5) = "TEST5"
For I = 1 To 5
m_hWnd(I) = CreateWindowEx(&H4, "BUTTON", T(I), BS_AUTOCHECKBOX Or WS_CHILD Or WS_VISIBLE, 10, 10 + I * 20, 120, 13, Me.hwnd, CHECK_BASE_ID + I, App.hInstance, 0)
Next
End Sub

Private Sub cmdTest1_Click()
Dim bChecked As Boolean
bChecked = IsDlgButtonChecked(Me.hwnd, CHECK_BASE_ID + 1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
For I = 1 To 5
If m_hWnd(I) <> 0 Then
DestroyWindow m_hWnd(I)
End If
Next
End Sub
wangsitao 2002-04-26
  • 打赏
  • 举报
回复
agree with : zyl910(910:分儿,我来了!)
先在窗体上放一个check_okey(0),设为不显示
到需要显示时再显示
接着

for i=1 to ubound(fs,2)
'我想创建checkbox控件数组check_okey
load check_okey(i)
check_okey(i).visibled=true
'再设定他的位置
next
505 2002-04-26
  • 打赏
  • 举报
回复
你可以这样:
先在窗体上放置一个checkbox,将其Index设为0,Visible设为False
点一下Cmd_AddNewControl 时:
i = i + 1
Load Check1(i)
Check1(i).Visible = True
Check1(i).Top = i * 500'任定

zihualive 2002-04-26
  • 打赏
  • 举报
回复
能实现这个功能吗好像不行吧。
祝你好运!
zyl910 2002-04-26
  • 打赏
  • 举报
回复
没必要这么做吧
先在窗体上放一个check_okey(0),设为不显示
到需要显示时再显示
okey 2002-04-26
  • 打赏
  • 举报
回复
我说一下具体情况吧:
dim rs as new Adodb.RecordSet
我有一个数据集fs
fs=rs.getrows()
dim i as integer
for i=0 to ubound(fs,2)
'我想创建checkbox控件数组check_okey
'能否直接创建的就是控件数组check_okey(i)?
'请告知!谢谢!

next
zyl910 2002-04-26
  • 打赏
  • 举报
回复
好像不可能

1,453

社区成员

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

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