安徽彩票大奖 欧洲百万乐透大奖 七星彩17049规律大奖 双色球中大奖领奖过程 3d近期中大奖故事 广州番禺中福彩大奖的 鸡男注定会中大奖 2016江苏彩民中大奖 趣彩网大奖网黑平台 大乐透4.97亿大奖 霍邱一彩民6元中双色球547万大奖 双色球黑龙江中大奖图 体育彩票中大奖名单 什么样的人能中大奖 彩票大奖作假

Access中通过VBA程序代码在Access窗体上动态创建ActiveX控件-高级技巧

2017-08-31 15:06:00
zstmtony
原创
1079

Access中通过VBA程序代码在Access窗体上动态创建ActiveX控件


我们知道在Access中可以通过 Createcontrol 来动态在窗体上创建控件,但大家有否发现,创建普通的Access控件是可以的

但是创建Activex或其它Customcontrol是不行。不管你如何创建,这个控件总是无法生效或激活的。

CreateControl 创建 AcitveX 控件 是通过 (acCustomControl 参数),虽然命令是执行成功了,但它仅仅是创建一个空的容器(empty container)

Activex控件的属性 方法 和事件都没有激活。这是为什么呢?


最终几天不断的研究和分析,发现原来是这个Activex的OleData未填充导致的。


有2?#22336;?#27861;来实现

1.将每种Activex控件的OleData保存在一个模板表中,在需要的时间将这些OleData内容赋给刚创建的Activex控件

2.从其它窗体或本控件同类型的Activex控件中复制OleData


2?#22336;?#27861;都需要 分别 对如 Treeview imagelist listview等这些Activex控件分别处理


以下是使用代码动态创建Activex控件Treeview树控件的方法:


Dim frm As Form, ctl As ControlSet
Docmd.Openform "?#19994;?#31383;体",acDesign ,,,,acHidden  '隐藏打开窗体到设计视图
frm = Forms("?#19994;?#31383;体") 
Set ctl = CreateControl(frm.Name, acCustomControl, acDetail, , , 100, 100, 200, 200)
ctl.OleData = frm("已存在的树控件名").OleData  '已存在的树控件名 是已存在当前窗体上或其它窗体上树控件



同样创建网页浏览器控件也可以通过类似的方法


Dim ctlNew As Access.Control

'********************************************
' 在主体节添加浏览器控件 web browser control
'    a.) OLE Class: Microsoft Web Browser
'    b.) Class: Shell.Explorer.2
'********************************************

Set ctlNew = CreateControl(frmNew.Name, acCustomControl,  acDetail)
      
    With ctlNew

        .OLEClass = "Microsoft Web Browser"
        .Class = "Shell.Explorer.2"
        .Verb = 0
        .Visible = True
        .OleData = forms("另一个窗体").controls("WebBrowser2").OleData

 End With



此知识点相关Access资料


Access VBA教程:OLEData属性

本主题中的部分内容可能不适用于某些语言。

使用 OLEData属性可以将?#31383;?#23450;对象框中的数据复制到其他?#31383;?#23450;对象框,或者将ActiveX 控件中的数据复制到其他 ActiveX 控件。

设置

controlname.OLEData

OLEData属性使用以下设置:

设置 说明
ControlName 必需。表示?#31383;?#23450;对象框控件的名称。
OLEData 必需。表示?#31383;?#23450;对象框或 ActiveX 控件所包含的数据。

OLEData属性仅在使用 Visual Basic 时才可用。对于 ActiveX 控件,只有在“设计”视图中才能将其 OLEData属性设为其他 ActiveX 控件的 OLEData属性。

说明

使用该属性可以在?#31383;?#23450;对象框中显示其他?#31383;?#23450;对象框中的数据。

如果将 ActiveX 控件的 OLEData属性设为其他 ActiveX 控件的 OLEData属性,则第一个 ActiveX 控件将成为第二个 ActiveX 控件的另一个实例。例如,下列对属性进行赋值的代码将 TreeView 控件改为 Calendar 控件:

Me!MyTreeViewControl.OLEData = Me!MyCalendarControl.OLEData
分享
? 1999-2019 Office交流网?? 中山市天鸣科技发展有限公司 粤ICP备10043721号-5 SQL查询:19
内存占用:8.00MB
PHP 执行时间:0.18
双色球大奖2000年
安徽彩票大奖 欧洲百万乐透大奖 七星彩17049规律大奖 双色球中大奖领奖过程 3d近期中大奖故事 广州番禺中福彩大奖的 鸡男注定会中大奖 2016江苏彩民中大奖 趣彩网大奖网黑平台 大乐透4.97亿大奖 霍邱一彩民6元中双色球547万大奖 双色球黑龙江中大奖图 体育彩票中大奖名单 什么样的人能中大奖 彩票大奖作假