在设计者的基础上可以创建可视的界面。扩展模型可以视为空的插槽,在该插槽中可以插上不同类型的设计者。
Visual Basic 开始仅使用一种设计者。然而,现在 Visual Basic 已成为多种设计者的宿主,其中包括 UserDocuments 和 UserControls,它们允许创建 ActiveX 文档和 ActiveX 控件,这些文档和控件不仅能用于 Visual Basic,而且能用于诸如 Microsoft Word 或者 Microsoft Excel 之类的 Microsoft Office 应用程序。
下面的代码片断显示了如何引用 VBForms 对象,以及其它扩展性对象:
'给窗体添加控件。所添加控件的类型基于在组合框中选择的控'件类型。Private Sub cmdAddControl_Click()Dim c As VBComponentDim p As VBProjectDim vbc As VBControlDim vbc2 As VBControlDim vbf As VBFormDim sc As StringDim sp As StringDim svbc As StringDim pid As Stringsp = cmbProj.Textsc = cmbComp.Textsvbc = cmbControls.TextIf sp <> "" And sc <> "" And svbc <> "" ThenSet p = vbi.VBProjects.Item(sp)Set c = p.VBComponents.Item(sc)If c.Type = vbext_ct_VBForm ThenSet vbf = c.DesignerSet vbc = vbf.VBControls.Item(svbc)pid = vbc.ProgIdSet vbc2 = vbf.VBControls.Add(pid)End IfEnd IfEnd Sub'刷新窗体中的控件列表。当添加控件时,主对象中的事件处'理程序调用子过程。Public Sub RefreshControls()Dim c As VBComponentDim p As VBProjectDim vbc As VBControlDim vbf As VBFormDim sc As StringDim sp As StringDim tempIndex As LongScreen.MousePointer = vbHourglassIf cmbControls.ListCount > 0 ThentempIndex = cmbControls.ListIndex'用来恢复先前选定的临时索引。End Ifsp = cmbProj.Textsc = cmbComp.TextIf sc <> "" And sp <> "" ThencmbControls.ClearSet p = vbi.VBProjects.Item(sp)Set c = p.VBComponents.Item(sc)If c.Type = vbext_ct_VBForm Thenc.ActivateSet vbf = c.DesignerFor Each vbc In vbf.VBControlscmbControls.AddItem _vbc.Properties("name")Next vbcElsecmbControls.Text = "No Form Selected"End If'恢复先前的选定。If cmbControls.ListCount > 0 ThenIf tempIndex <= cmbControls. _ListCount - 1 ThencmbControls.ListIndex = tempIndexElsecmbControls.ListIndex = 0End IfEnd IfEnd IfScreen.MousePointer = vbDefaultEnd Sub'从窗体中删除控件Private Sub cmdRemoveControl_Click()Dim c As VBComponentDim p As VBProjectDim vbc As VBControlDim vbf As VBFormDim sc As StringDim sp As StringDim svbc As Stringsp = cmbProj.Textsc = cmbComp.Textsvbc = cmbControls.TextIf sp = "" Or sc = "" Or svbc = "" Then Exit SubSet p = vbi.VBProjects.Item(sp)Set c = p.VBComponents.Item(sc)If c.Type = vbext_ct_VBForm ThenSet vbf = c.DesignerSet vbc = vbf.VBControls.Item(svbc)vbf.VBControls.Remove vbcEnd IfEnd Sub