Dim chk(10) As VB.OptionButton
Dim i As Integer
For i = 0 To 10
    Set chk(i) = Controls.Add("VB.OptionButton", "chk_" & i, Form1)
    chk(i).Visible = True
Next i

解决方案 »

  1.   

    将Set chk(i) = Controls.Add("VB.OptionButton", "chk_" & i, Form1)
    中的form1换成frame的name即可
      

  2.   

    Set chk(i) = Controls.Add("VB.OptionButton", "chk_" & i, Frame1)
      

  3.   

    Add 方法(Controls 集合)
          在 Controls 集合中添加一个控件并返回一个对该控件的引用。语法object.Add (ProgID, name, container)Add 方法语法有这些部分:部分 描述 
    Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。 
    ProgID 必需的。一个标识控件的字符串。大多数控件的 ProgID 都可通过查看对象浏览器来决定。控件的 ProgID 是由控件的库和类组成的。例如,CommandButton 控件的 ProgID 是 VB.CommandButton。在 ProgID 与对象浏览器中所显示的不一样的情况下,Visual Basic 将显示一个包括正确 ProgId 的错误信息。 
    name 必要的。一个字符串,用来标识集合的成员。 
    container 可选的。一个对象引用,它指定控件的容器。如果没有指定或为 NULL,缺省值为 Controls 集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如 Frame 控件)中。用户控件或 ActiveX 文档也可以作为一个容器。 
      

  4.   

    謝謝各位........Private Sub fillRid(ByVal name As String, ByVal sfra As Frame)
        Dim txt As TextBox
        Set txt = Controls.Add("VB.textbox", name, sfra)
        txt.Visible = True
        txt.Text = name & ": "
        txt.BorderStyle = 0
        txt.Appearance = 0
        txt.Height = 255
        txt.BackColor = &H8000000F
        txt.Left = Frame3.Left + sfra.Left + 600
        txt.Top = Frame3.Top + sfra.Top + 180
        txt.ZOrder (0)
    End SubLoad fra(i)
    fillRid NULL2Empty(rs("ridname")), fra(i)為甚麼不能達到我要的效果了. 以動態frame為container就不可以了,怎麼回事
      

  5.   

    謝謝大家了..明白了............
        txt.Left = Frame3.Left + sfra.Left + 600
        txt.Top = Frame3.Top + sfra.Top + 180闖的禍````````````
      

  6.   

    //Load fra(i)Load fra(i)之后控件默认是不可见的,另外你最好用move语句改变一下它的位置