【问题标题】:How do I add a control at design time without using Drag 'n' Drop?如何在设计时添加控件而不使用拖放?
【发布时间】:2010-09-22 12:45:14
【问题描述】:

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

我希望控件的用户能够使用属性页向设计时控件添加和管理 CWizardPage。

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

我的下一个想法是只允许用户在设计时绘制向导页面。这种方法很有效,但是在另一个向导页面中而不是在 CWizardContainer 中绘制一个向导页面太容易了。

那么谁能告诉我如何在设计时向表单添加控件而不使用拖放?

【问题讨论】:

    标签: vb6 user-controls controls


    【解决方案1】:

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

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

    这是来自 VB6 帮助文件的 sn-p:

    添加方法(控件集合)


    将控件添加到 Controls 集合并返回对 控件。

    语法

    对象.添加 (***ProgID, name, container*)**

    Add 方法语法包含以下部分:

    对象(必填)

    计算结果为的对象表达式 应用于列表中的对象。

    ProgID(必需)

    一个字符串 标识控件。的 ProgID 大多数控件可以通过以下方式确定 查看对象浏览器。程序ID 由库和类组成 的控制。例如, CommandButton 控件的 ProgID 为 VB.CommandButton。在这种情况下 ProgID 不同于 对象浏览器,Visual Basic 显示 一条错误消息,其中包含 正确的 ProgId。

    姓名(必填)

    标识成员的字符串 集合。

    容器(可选)

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

    【讨论】:

      【解决方案2】:

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

      事实并非如此。在 VB6 中运行时实例化控件很简单。

      1. 在设计时,设置索引 控件的属性为 0。这 把控件变成控件 数组。
      2. 在运行时,根据需要加载控件的新实例。

      例如,创建新的标准 EXE 项目,将 TextBox 拖放到窗体上,将其索引设置为 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
      

      【讨论】:

        【解决方案3】:

        我开发了一个应用程序,该应用程序定期根据所需字段动态制作许多完整的数据输入屏幕。一直指定 Top、Left、Width 和 Height 是很冗长的。因此,您通常有一个控件的“模板”并将这些设置复制到另一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多