access vba动态创建控件
2014-03-21 11:58
295 查看
在VBA编写的程序中,如果可以在运行时动态创建控件无疑是非常有用的,因为有些控件是无法预先得知的,这样就更必须在运行时动态创建然后设置相应控件属性。在vb,excel当中,使用Control的add方法可以实现,如下:
然而,在access当中,当我们调用Controls.Add时,却发现access的vba文档中不存在此方法,在文档中查询了下,发现等价的方法是
CreateControl(),下面是其文档说明:
CreateControl 方法
参阅应用于示例特性
CreateControl 方法在指定的已打开窗体上创建一个控件。例如,假设您正在建立一个便于用户构建特殊窗体的自定义向导。可以在向导中使用CreateControl 方法将适当的控件添加到窗体上。
CreateControl(formname,controltype[,section[,parent[,columnname[,left[,top[,width[,height]]]]]]])
CreateControl 方法包含下列参数:
对象。
只可以分别在窗体“设计”视图或报表“设计”视图中使用CreateControl 和
CreateReportControl 方法。
可以使用 parent 参数确定主控件和次控件之间的关系。例如,如果文本框有一个附属标签,则文本框是主(父)控件,标签是次(子)控件。创建标签控件时,请将其 parent 参数设为标识父控件名称的字符串。创建文本框时,请将其 parent 参数设置为零长度字符串。
在创建复选框、选项按钮或切换按钮时,也可以设置 parent 参数。选项组是其所含复选框、选项按钮或切换按钮的父控件。只有标签、复选框、选项按钮或切换按钮等控件才有父控件。当然这些控件也可以不使用父控件而独立创建。
根据正在创建的控件类型,以及它是否绑定到表中字段这两个条件,可以设置 columnname 参数。绑定到字段的控件可以是文本框、列表框、组合框、选项组和绑定对象框。另外,如果切换按钮、选项按钮和复选框控件没有包含在选项组中,则也可以与字段绑定。
如果指定 columnname 参数的字段名称,则可以创建一个绑定到该字段的控件。然后所有控件的属性都将自动设置为与之对应的字段属性值。例如,控件的
ValidationRule 属性值将与该字段的属性值相同。
注释 如果向导在新的或现有的窗体或报表中创建控件,它必须先在“设计”视图中打开窗体或报表。
若要从窗体或报表中删除控件,请使用 DeleteControl 和DeleteReportControl 语句。
[/code]
01.
Private
WithEvents
cmdHUP
As
MsForms.CommandButton
02.
03.
Private
Sub
UserForm_Click()
04.
Set
cmdHUP = Controls.Add(
"Forms.CommandButton.1"
, _
05.
"cmdHUP"
,
True
)
06.
07.
With
cmdHUP
08.
.Left = 10
09.
.Top = 100
10.
.Width = 175
11.
.Height = 20
12.
.Caption =
"CnHUP"
13.
End
With
14.
End
Sub
15.
16.
Public
Sub
cmdHUP_Click()
17.
MsgBox
"welcome to http://www.cnhup.com"
18.
End
Sub
然而,在access当中,当我们调用Controls.Add时,却发现access的vba文档中不存在此方法,在文档中查询了下,发现等价的方法是
CreateControl(),下面是其文档说明:
CreateControl 方法
参阅应用于示例特性
CreateControl 方法在指定的已打开窗体上创建一个控件。例如,假设您正在建立一个便于用户构建特殊窗体的自定义向导。可以在向导中使用CreateControl 方法将适当的控件添加到窗体上。
CreateControl(formname,controltype[,section[,parent[,columnname[,left[,top[,width[,height]]]]]]])
CreateControl 方法包含下列参数:
参数 | 说明 | |
---|---|---|
formname | 字符串表达式,用于标识要在其中创建控件的已打开窗体或报表的名称。 | |
controltype | 下列固有常量之一,用于标识要创建的控件的类型。若要在“对象浏览器”中查看这些常量并将其粘贴到代码内,请在Visual Basic 的工具栏上单击“对象浏览器”,然后单击“工程/库”框中的Access,最后单击“类”框中的 AcControlType。 | |
常量 | 控件 | |
acBoundObjectFrame | 绑定对象框 | |
acCheckBox | 复选框 | |
acComboBox | 组合框 | |
acCommandButton | 命令按钮 | |
acCustomControl | ActiveX 控件 | |
acImage | 图像 | |
acLabel | 标签 | |
acLine | 线条 | |
acListBox | 列表框 | |
acObjectFrame | 未绑定对象框 | |
acOptionButton | 选项按钮 | |
acOptionGroup | 选项组 | |
acPage | 页 | |
acPageBreak | 分页符 | |
acRectangle | 矩形 | |
acSubform | 子窗体 | |
acTabCtl | 选项卡控件 | |
acTextBox | 文本框 | |
acToggleButton | 切换按钮 | |
section | 下列固有常量之一,用于标识将包含新控件的节。若要在“对象浏览器”中查看这些常量并将其粘贴到代码中,请在 Visual Basic 的工具栏上单击“对象浏览器”,然后单击“工程/库”框中的Access,最后单击“类”框中的 AcSection。 | |
常量 | 节 | |
acDetail | (默认)主体节 | |
acHeader | 窗体或报表页眉 | |
acFooter | 窗体或报表页脚 | |
acPageHeader | 页面页眉 | |
acPageFooter | 页面页脚 | |
acGroupLevel1Header | 分组级别 1 页眉(仅用于报表) | |
acGroupLevel1Footer | 分组级别 1 页脚(仅用于报表) | |
acGroupLevel2Header | 分组级别 2 页眉(仅用于报表) | |
acGroupLevel2Footer | 分组级别 2 页脚(仅用于报表) | |
如果报表有另外的分组级别,页首/页脚将成对从 9 开始连续编号。 | ||
parent | 字符串表达式,用于标识附加控件的父控件名称。对于没有父控件的控件,该参数可以是零长度字符串,也可以忽略。 | |
columnname | 如果创建的是一个数据绑定型控件,则该参数为控件将绑定到的字段的名称。 | |
如果创建的是一个不绑定到字段的控件,则应将该参数设为零长度字符串。 | ||
left,top | 数值表达式,表示控件左上角的坐标值,以缇为单位。 | |
width,height | 数值表达式,表示控件的宽度和高度,以缇为单位。 |
说明
可以使用自定义向导中的 CreateControl 和CreateReportControl 方法来创建窗体或报表上的控件。两个方法都将返回一个Control对象。
只可以分别在窗体“设计”视图或报表“设计”视图中使用CreateControl 和
CreateReportControl 方法。
可以使用 parent 参数确定主控件和次控件之间的关系。例如,如果文本框有一个附属标签,则文本框是主(父)控件,标签是次(子)控件。创建标签控件时,请将其 parent 参数设为标识父控件名称的字符串。创建文本框时,请将其 parent 参数设置为零长度字符串。
在创建复选框、选项按钮或切换按钮时,也可以设置 parent 参数。选项组是其所含复选框、选项按钮或切换按钮的父控件。只有标签、复选框、选项按钮或切换按钮等控件才有父控件。当然这些控件也可以不使用父控件而独立创建。
根据正在创建的控件类型,以及它是否绑定到表中字段这两个条件,可以设置 columnname 参数。绑定到字段的控件可以是文本框、列表框、组合框、选项组和绑定对象框。另外,如果切换按钮、选项按钮和复选框控件没有包含在选项组中,则也可以与字段绑定。
如果指定 columnname 参数的字段名称,则可以创建一个绑定到该字段的控件。然后所有控件的属性都将自动设置为与之对应的字段属性值。例如,控件的
ValidationRule 属性值将与该字段的属性值相同。
注释 如果向导在新的或现有的窗体或报表中创建控件,它必须先在“设计”视图中打开窗体或报表。
若要从窗体或报表中删除控件,请使用 DeleteControl 和DeleteReportControl 语句。
示例
下面的示例首先基于“订单”表创建一个新窗体,然后使用 CreateControl 方法在窗体上创建文本框控件和附属标签控件。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
[/code]
相关文章推荐
- 在MFC中创建动态控件的生成与响应
- 基于ASP.NET的Web动态控件创建
- 总结下动态创建控件的方法
- C#中动态创建控件及事件处理程序
- android 中动态创建控件
- silverlight中动态创建控件和model对话框
- 如何在页面中动态创建控件
- 利用JS动态创建html控件并在后台实现取值
- 动态创建的CListCtrl控件的消息响应
- [转载]在MFC中创建动态控件的生成与响应[转]
- 在VB中创建和使用动态数组控件的方法总结
- ASP.NET动态创建控件之绝境求生
- 动态创建页面(服务器控件和表格)
- Excel使用控件创建动态地图图表
- DELPHI 动态 创建和释放 多个 EDIT 控件
- 让你动态创建的控件响应消息!
- 通过反射字符串动态创建控件
- Delphi控件cxGrid 如何动态创建列?
- C#中动态创建控件及事件处理程序
- VS2013MFC单文档工程学习笔记四 - 动态创建多个控件