如何在设计时添加控件而不使用Drag'和'Drop?

时间:2008-11-15 22:33:57

标签: vb6 user-controls controls

我正在尝试在VB6中创建一个向导类型控件,并且遇到了绊脚石。

我想允许控件的用户能够使用属性页面将CWizardPage添加和管理到设计时控件。

我使用的第一种方法是使用Collection直接将向导页面添加到OCX,但我遇到了两个问题,即Collection类不可持久化(我找不到一个简单的方法来实现它并且VB6在运行时实例化控件的能力似乎非常有限 - 所以实际重新实例化它似乎很难。

我的下一个想法是让用户在设计时绘制向导页面。这种工作,但是在另一个向导页面内而不是在CWizardContainer中绘制其中一个向导页面太容易了。

那么有人可以告诉我如何在设计时将控件添加到表单而不使用拖放吗?

3 个答案:

答案 0 :(得分:1)

您可以使用容器的Add集合的Controls方法向表单或其他容器(例如UserControl)动态添加控件。例如,要将名为myTextBox的TextBox添加到名为frmMyForm的表单中,您可以这样做:

frmMyForm.Controls.Add "VB.TextBox", "myTextBox"

以下是VB6帮助文件的片段:

  

添加方法(控制集合)

     


  将控件添加到控件   收集并返回一个引用   控制。

     

<强>语法

     

对象添加 (*** ProgID,名称,容器* )**

     

添加方法语法包含以下部分:

     

对象(必填)

     

评估为的对象表达式   适用于列表中的对象。

     

ProgID (必填)

     

一个字符串   识别控件。的ProgID   大多数控制可以通过确定   查看对象浏览器。 ProgID   由图书馆和班级组成   控制。例如,   CommandButton控件的ProgID是   VB.CommandButton。在哪些情况下   ProgID与中所示的不同   对象浏览器,Visual Basic显示   包含该错误消息   纠正ProgId。

     

名称(必填)

     

标识其成员的字符串   集合。

     

容器(可选)

     

指定a的对象引用   控制的容器。如果不   指定或NULL,默认为   控件的容器   集合属于。你可以放一个   在任何现有容器中控制   控制(如Frame控件)   指定此参数。一个用户   控件或ActiveX文档可以   也是一个容器。

答案 1 :(得分:0)

  

...... VB6似乎非常有限   能够在运行时实例化控件   时间...

事实并非如此。在VB6中运行时实例化控件是微不足道的。

  1. 在设计时,设置索引 控制的属性为0.这 将控件转换为控件 阵列。
  2. 在运行时,根据需要加载控件的新实例。
  3. 例如,创建新的标准EXE项目将TextBox放到窗体上,将其Index设置为0并将以下内容放在Form_Load事件中:

    Private Sub Form_Load()
    
        Dim newIndex As Integer
    
        newIndex = Text1.UBound + 1
        Load Text1(newIndex)
        Text1(newIndex).Top = Text1(newIndex - 1).Top + Text1(newIndex - 1).Height
        Text1(newIndex).Visible = True
    
    End Sub
    

答案 2 :(得分:0)

我已经开发了一个应用程序,它根据所需的字段定期动态地创建许多整个数据输入屏幕。一直指定顶部,左侧,宽度和高度都很冗长。因此,您通常拥有控件的“模板”,并将这些设置复制到其他设置。