Access使用VBA代码自动创建控件的方法及示例

2017-08-28 16:58:00
zstmtony
原创
955

能否通过程序代码来自动创建Access窗体上的控件呢,理论上是可行的。Access本身就提供了CreateControl这个方法

可以让您通过VBA代码来自动创建控件,并指定控件的类型及相关属性



Application.CreateControl方法

Office 2007
CreateControl方法创建一个指定的打开窗体上的一个控制。例如,假设您正在构建一个允许用户轻松构建特定表单的自定义向导。您可以使用向导中的CreateControl方法向窗体添加相应的控件。

句法

表达式 .CreateControl(FormNameControlTypeSectionParentColumnNameLeftTopWidthHeight

表达式    表示Application对象的变量。

参数

名称 必需/可选 数据类型 描述
窗体名称 需要 要在其上创建控件的打开的表单或报表的名称。
ControlType 需要 AcControlType 一个AcControlType 常量表示要创建的控件的类型。
部分 可选的 AcSection 一个AcSection常数,用于标识将包含新控件的部分。
可选的 变种 附件控件的父级控件的名称。对于没有父控件的控件,对此参数使用零长度字符串,或者省略它。
的ColumnName 可选的 变种 控制将绑定的字段的名称,如果它是一个数据绑定的控件。
左,上 可选的 变种 控制左上角的坐标为缇。
宽度,高度 可选的 变种 指示控件的宽度和高度的数字表达式,以缇为单位。

回报价值
控制

备注

您可以使用自定义向导中的Create ControlCreateReportControl方法在窗体或报表上创建控件。两个方法都返回一个Control 对象。

您可以分别使用CreateControlCreateReportControl方法在表单设计视图或报表设计视图中。

您可以使用参数来标识主控件和从属控件之间的关系。例如,如果文本框具有附加的标签,则文本框是主(或父)控件,标签是从属(或子)控件。创建标签控件时,将其父参数设置为标识父控件名称的字符串。创建文本框时,将其父参数设置为零长度字符串。

您还可以在创建复选框,选项按钮或切换按钮时设置参数。选项组是其包含的任何复选框,选项按钮或切换按钮的父控件。可以有父控件的唯一控件是标签,复选框,选项按钮或切换按钮。所有这些控件也可以独立创建,无需父控件。

根据您正在创建的控件的类型设置columnname参数,以及是否绑定到表中的字段。可能绑定到字段的控件包括文本框,列表框,组合框,选项组和绑定对象框架。此外,切换按钮,选项按钮和复选框控件可能会绑定到一个字段,如果它们不包含在选项组中。

如果指定columnname参数的字段名称,则创建绑定到该字段的控件。然后,所有控件的属性将自动设置为任何相应的字段属性的设置。例如,控件的ValidationRule 属性的值将与该字段的该属性的值相同。

Bb237827.vs_note(EN-US,office.12).gif注意:  注意
如果您的向导在新的或现有的表单或报表上创建控件,则必须首先在“设计”视图中打开表单或报表。

要从表单或报表中删除控件,请使用DeleteControlDeleteReportControl 语句。

以下示例首先基于Orders表创建一个新表单。然后它使用CreateControl方法在表单上创建一个文本框控件和附加的标签控件。

Visual Basic应用程序
Sub NewControls()
    Dim frm As Form
    Dim ctlLabel As Control, ctlText As Control
    Dim intDataX As Integer, intDataY As Integer
    Dim intLabelX As Integer, intLabelY As Integer

    ' Create new form with Orders table as its record source.
    Set frm = CreateForm
    frm.RecordSource = "Orders"
    ' Set positioning values for new controls.
    intLabelX = 100
    intLabelY = 100
    intDataX = 1000
    intDataY = 100
    ' Create unbound default-size text box in detail section.
    Set ctlText = CreateControl(frm.Name, acTextBox, , "", "", _
        intDataX, intDataY)
    ' Create child label control for text box.
    Set ctlLabel = CreateControl(frm.Name, acLabel, , _
         ctlText.Name, "NewLabel", intLabelX, intLabelY)
    ' Restore form.
    DoCmd.Restore
End Sub
分享