Option Explicit
Dim WithEvents newchk As VB.CheckBox
Private Sub Form_Load()    Dim i As Integer
    Dim sname(5) As String
    sname(0) = "a"
    sname(1) = "b"
    sname(2) = "c"
    sname(3) = "d"
    sname(4) = "e"
    sname(5) = "f"
    
    For i = 0 To 5
        Set newchk = Controls.Add("vb.checkbox", "chk" & i, Me)
        With newchk
            .Visible = True
            .Top = 300 * i + 200
            .Left = 180
            .Caption = sname(i)
            .Width = 1500
            .Height = 255
        End With
    NextEnd Sub
怎样响应每一个checkbox控件的事件????

解决方案 »

  1.   

    没有办法,除非
    Dim WithEvents newchk_0 As VB.CheckBox
    Dim WithEvents newchk_1 As VB.CheckBox
    Dim WithEvents newchk_2 As VB.CheckBox
    Dim WithEvents newchk_3 As VB.CheckBox
    Dim WithEvents newchk_4 As VB.CheckBox
    Dim WithEvents newchk_5 As VB.CheckBox
    然后分别
    Set newchk_0 = Controls.Add("vb.checkbox", "chk" & i, Me)
    Set newchk_1 = Controls.Add("vb.checkbox", "chk" & i, Me)
    ....
    然后才会响应事件
    Private Sub newchk_0_Click()
        MsgBox "Click"
    End Sub
    Private Sub newchk_1_Click()
        MsgBox "Click"
    End Sub
    .....
    如果withevents 不能创建数组, 如果没有withevents,却可以创建数组
    确实有矛盾,不过既然是动态加载的控件,不要指望它功能有多强大
      

  2.   

    给个思路,我常用的:
    先创建一个checkbox的数组(如chkOne,index属性为0),那么他有一个Click事件
    然后Form_Load()中用load 语句加载其它的(如:load chkOne(1),load chkOne(2) )
    这样他们的Click事件都是一个,很好管理。(不过真要用还有很多细节问题。)
      

  3.   

    谢谢两位的回答,我要做的是:根据数据库中的记录数,动态地添加控件到form上,而且要响应每个动态添加上去的控件的事件,郁闷ing...
      

  4.   

    使用With Events关键字来定义新的控件变量。
      

  5.   

    那便可以采用  nebbish(nebbish)  说的方法。
    由于是控件数组, 你可以动态响应每个新添加的控件事件的, 根据index的不同判断