小弟正在为VB中实现动态增加多个控件发愁,控件名需要象数组那样意义一一记录下来。请大虾帮忙解决。急,汗!!!

解决方案 »

  1.   

    (转自lihonggen0)
    在VB中动态添加可响应消息的控件
    在VB编程中,经常要根据不同的情况在运行时向窗口中添加或者删除控件,而各个控件还要
    响应各种事件。在一般的情况下是首先在设计时将控件加入到窗口中,在它们的各个事件中写入
    代码,然后将它们的Visible属性设置为False。在运行时再使控件显示出来,但是这样既不方便
    同时也因为在设计时在窗口中加入太多的控件而使得程序的运行速度变慢。下面我向大家介绍一
    种通过编程在运行时动态添加和删除控件的方法
    首先建立一个工程文件,然后在Form1中加入以下的代码:
    Dim WithEvents cmdMyCommand As VB.CommandButton
    Option Explicit
    '在下面的定义中,程序定义了一个TextBox控件、一个CommandButton控件
    '和一个附加控件。
    Dim WithEvents ctlDynamic As VBControlExtender
    Dim WithEvents ctlText As VB.TextBox
    Dim WithEvents ctlCommand As VB.CommandButton
    Dim WithEvents ctlCommandDel As VB.CommandButton
    Private Sub ctlCommandDel_Click()
    Dim i As Integer
    '将控件的许可证信息删除
    Licenses.Remove "MSComctlLib.TreeCtrl"
    If MsgBox("是否删除所有控件", vbYesNo) = vbYes Then
    For i = 1 To Form1.Controls.Count
    Controls.Remove 0
    Next i
    End If
    End Sub
    Private Sub ctlCommand_Click()
    ctlText.Text = "你点击的是控制按钮"
    End Sub
    Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
    '当点击树形控件的某一个条目后,在ctlText中显示条目。
    If Info.Name = "Click" Then
    ctlText.Text = "你点击的条目是 " & _
    ctlDynamic.object.selecteditem.Text
    End If
    End Sub
    Private Sub Form_Load()
    Dim i As Integer
    ' 将树形控件的许可证信息加入到许可证集合中
    ' 如果许可证已经存在,则会返回错误信息732
    Licenses.Add "MSComctlLib.TreeCtrl"
    ' 在Form中动态的加入一个树形控件,如果你想树形控件建立到不同的
    '容器中,象一个Frame控件或者PictureBox控件,你只要将Controls.Add
    '函数的第三个参数改为特定的容器名就可以了
    Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
    "myctl", Form1)
    '设置树形控件的位置和尺寸
    ctlDynamic.Move 1, 1, 2500, 3500
    '在树形控件中加入10个节点
    For i = 1 To 10
    ctlDynamic.object.nodes.Add Key:="Test" & Str(i), _
    Text:="Test" & Str(i)
    ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _
    Relationship:=4, Text:="TestChild" & Str(i)
    Next i
    '使树形控件可见
    ctlDynamic.Visible = True
    '加入一个TextBox
    Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
    '设置TextBox的位置和尺寸
    ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
    1, 2500, 100
    '将textBox的背景色设置为蓝色并将前景色设置为白色
    ctlText.BackColor = vbBlue
    ctlText.ForeColor = vbWhite
    '使TextBox可见
    ctlText.Visible = True
    '加入一个CommandButton
    Set ctlCommand = Controls.Add("VB.CommandButton", _
    "ctlCommand1", Form1)
    '设置CommandButton的位置和尺寸
    ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
    ctlText.Height + 50, 1500, 500
    '设置CommandButton的标题
    ctlCommand.Caption = "点击"
    '使CommandButton可见
    ctlCommand.Visible = True
    '建立一个删除按钮
    Set ctlCommandDel = Controls.Add("VB.CommandButton", _
    "ctlCommand2", Form1)
    ctlCommandDel.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
    ctlText.Height + 650, 1500, 500
    ctlCommandDel.Caption = "删除所有控件"
    ctlCommandDel.Visible = True
    End Sub
    运行上面的程序,可以看到程序在窗口中加入了三个VB标准控件:一个TextBox和两个
    CommandButton还加入了一个扩展的ActiveX控件:树形控件。这些控件还可以响应消息,
    点击树形控件中的项目或者“点击”按钮就可以在文本框中显示相应的内容。点击“删除
    所有控件”按钮就可以删除加入的所有控件了。
    通过上面的程序可以看到,通过WithEvents可以定义带事件相应的控件,对于标准的VB
    控件(例如CommandButton、TextBox等)可以通过VB.XXX来定义,其中XXX是控件的类的名称
    ,而对于扩展的ActiveX控件,可以通过VBControlExtender来定义,在装载扩展控件以前,
    首先要使用Licenses对象加入控件的许可证信息。
    上面的程序在VB6,WIN98中文版下运行通过。
      

  2.   

    最简单的方法:控件数组。
    在VB编程中有一个控件数组的概念, 通过置控件的INDEX 索引值的控制, 不仅可以建立一组具有紧密联系的相同控件, 而且可以实现在程序运行状态中增加控件数目功能, 这在实际编程中应用的非常广泛;在编程中实现具体增加控件数组如下代码即可,请先在窗体上添加一个option控件,名称为option1,并将index属性设为0.Private Sub Form_ load()   Dim i As Integer      For i = 1 To 5          Load Option1(i) ' 给数组添加 5 个选项按钮。          Option1(i).Top = Option1(i - 1).Top + 350’设置顶端位置          Option1(i).left= Option1(i - 1).left+800          Option1(i).Visible = True’显示增加的控件          Option1(i).caption = i      Next iEnd SubPrivate Sub Option1_Click(Index As Integer)MsgBox ("您点击了index为" & Index & "的option控件.")End Sub
      

  3.   

    (二)通过Add方法实现
    Add方法在Controls集合中添加一个控件并返回一个对控件的引用。Add方法的语法为:Object.Add(ProgID,Name,Container)其中Object为要添加元素的集合,ProgID为标示的字符串.可通过对象浏览器来确定,例如,CommandButton控件的ProgID是VB.CommandButton. Name是控件的名称. Container是包含添加控件的容器,可以为form或Frame控件等等。        Option Explicit    '通过使用WithEvents关键字声明一个对象变量为新的命令按钮        Private WithEvents NewButton As CommandButton        '增加控件        Private Sub Command1_Click()        If NewButton Is Nothing Then        '增加新的按钮cmdNew        Set NewButton = Controls.Add("VB.CommandButton", "cmdNew", Me)        '确定新增按钮cmdNew的位置        NewButton.Move Command1.Left + Command1.Width + 240, Command1.Top        NewButton.Caption = "新增的按钮"        NewButton.Visible = True        End If        End Sub        '新增控件的单击事件Private Sub NewButton_Click()        MsgBox "您选中的是动态增加的按钮!"End Sub
     
      

  4.   

    Option ExplicitPrivate Sub Form_Load()
    Dim cmd As CommandButton, i As Long
    For i = 0 To 5
        Set cmd = Controls.Add("VB.CommandButton", "cmd" & CStr(i), Me)
        cmd.Left = 1000
        cmd.Top = 700 * i + 50
        cmd.Width = 1000
        cmd.Height = 400
        cmd.Visible = True
    Next i
    Controls!cmd1.Caption = "cmd1"  ' 引用时可以这样写
    Controls.Remove "cmd5"          ' 删除 cmd5 命令按钮
    End Sub