我想根据一个未知数量的数组arry(i)在Picture上来自动生成SSPanel(i)控件,请问
我应该怎么做呢?

解决方案 »

  1.   

    哈哈~!根据一个未知数量的数组arry(i)在Picture上来自动生成SSPanel(i)控件
    说清楚些啊,不说具体点我都没法学习了UP
      

  2.   

    动态创建控件' 声明一个窗体级的变量
    Dim WithEvents txtTotal As TextBoxSub CreateTextbox()
       ' 创建新的Textbox控件
       Set txtTotal = Controls.Add("VB.TextBox", "txtTotal",Me)
       ' 将控件移动到你所需要的地方
       txtTotal.Move 1000, 1000, 1000, 1000
       ' 创建时,所有的控件都是不可见的
       txtTotal.Visible = True
    End Sub
        请注意Add方法的第二个参数:分配给控件的名称。你可以用这个名称从Controls集合中获取相应的控件或移除该控件。例如:Controls.Remove "txtTotal"    在变量声明时加上WithEvents关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。
    ***上面所讲的方法只适合解决VB内置的控件。***
        如果你要看详细的资料,可以去google找一下相关方面的资料。
      

  3.   

    我是我在一个网上看到的资料。
    但是我现在找的是在picture上动态创建多个SSpanel控件,
    而且他的数量是要根据一个数组arry(i)有关系,随着i的变化,创建的个数
    将相应的变生改变。
    请大家帮助我……
      

  4.   

    你的问题需要两步解决:
    1 动态加载控件
    2 将已经加载的控件移动到指定的容器中,并重新定位
    第一步你已经能够做到,现在我写第二步
    建一模块
    Option ExplicitPublic Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long在窗体加载控件加
      SetParent 动态加载控件的句柄,制定容器句柄
    例如   SetParent Frame1.hWnd, Picture1.hWnd
    将 Frame1 移动到 Picture1中
      

  5.   

    感谢Apple200228(Apple)的帮助。   
    但是我现在找的是在多个容器上(容器控也是动态创建的)动态创建多个SSpanel控件,而且他的数量是要根据一个数组arry(i)有关系,随着i的变化,创建的个数将相应的变生改变。
    例如:
        我要动态创建i个SSpanel控件,并在每个SSpanel控件上动态创建text控件,
    并且要求它们的相互位置是相同的,统一的;也就是说当创建第一个SSpanel控件的
    时候,相应的在这个SSpanel控件上创建第一个text控件,以此类推,第二个,第三个……一直到第i个。
        这个i的值是可以从一个函数中传过来,到这里的时候,他已经是个确定的值了。
      

  6.   

    Dim I As Integer
        For I = 0 To 2
            If Newpanel Is Nothing Then
                Set Newpanel = Controls.Add("threed.sspanel", "newpanel" & CStr(I), Me)
                Set Newtxt = Controls.Add("vb.textbox", "newtxt" & CStr(I), Newpanel)
                Newpanel.Visible = True
                Newtxt.Visible = True
        
                Call NewSetPos(I)
                Set Newtxt = Nothing
                Set Newpanel = Nothing
            End If
        Next I
        
    End SubPrivate Sub NewSetPos(II As Integer)'    Newpanel.Top = (100 + I * 500)
    '    Newpanel.Left = (100 + I * 500)
    '
    '    Newtxt.Top = (100 + I * 500)
    '    Newtxt.Left = (100 + I * 500)     Newpanel.Move 300 + II * 1000, 200 + II * 1000
    但在这里,他是每建立一次,然后释放了对象,然后再建立……
    也就是说并不是一次性全部建立你所要求数量的控件,
    所以在动态控件释放之前,要求你已经把全部的工作已经做完
    然后再释放。
      

  7.   

    TO junki:
    虽然不是很好,但我想暂时也可以用了!
    谢谢大家……