VBA错误信息:这个部件不支持该类事件(错误 459)并非每一个部件都支持事件的客户吸收。此错误有以下原因和解决方法:与一个部件共同使用WithEvents变量,而该部件不能作为指定事件集合的事件源。例如,您可能正吸收一个对象的事件,然后创建另一个对象,而它将Implements第一个对象。尽管您可能认为可以从已实现的对象吸收事件,但其实这并不是自动进行的。Implements仅仅为方法和属性实现接口。 不能对一个不是事件源的部件吸收事件。对于 Private UserControls,不支持WithEvents,因为引发 ObjectEvent 所需的类型信息在运行时不可用。 详细信息,可选取有问题的项目,并按下 F1 (在Windows中)或HELP(在Macintosh中)键。 '类模块:clsLst' Option Compare Database Option Explicit Public WithEvents m_LstBox As MSForms.ListBox Public WithEvents m_obj As CustomControl' 初始化,将控件绑定到类' ' Make sure Forms(strWndName).Controls(strCtlName) is an msforms.listbox Public Sub Init(strWndName As String, strCtlName As String, index As Long) Dim i As Long
m_strWndName = strWndName m_strCtlName = strCtlName m_index = index
Set m_LstBox = Forms(strWndName).Controls(strCtlName).Object Set m_obj = Forms(strWndName).Controls(strCtlName) '这一句报459运行时错误'
End Sub
在Accesc中ListBox透明不易实现,而在VB6中可以两个窗体叠加的方式实现。
那在 Access 中也可以叠加窗体呀。
透明就收不到鼠标消息。 这是 Windows 的规则,透明不仅不可见,鼠标消息也是直接穿透到下面的窗口上。 否则界面表现可以用一个词形容——见鬼了。
The Window's extend style.Alpha ---- For transparence. Value is 0 to 255 0 ---> Entireness transparent. 255---> Opaque.Use API: GetWindowLong() SetWindowLong() SetLayeredWindowAttributes()
http://blog.csdn.net/yin19991999/archive/2008/03/11/2166138.aspx
是这样,Access的ListBox不带CheckBox,我用了WinForm的ListBox可以设置带CheckBox,但是它是ActiveX控件,在ACCESS VBA的类里不能得到GotFocus事件(在这个帖子里也有描述这个问题)。Access的ListBox是标准控件,在ACCESS VBA的类里可以得到GotFocus事件。 所以我想在WinForm的ListBox上放一个透明的Access的ListBox用来帮助接受GotFocus事件。
即使拦截消息都很困难,没有句柄属性。
不能对一个不是事件源的部件吸收事件。对于 Private UserControls,不支持WithEvents,因为引发 ObjectEvent 所需的类型信息在运行时不可用。
详细信息,可选取有问题的项目,并按下 F1 (在Windows中)或HELP(在Macintosh中)键。
'类模块:clsLst'
Option Compare Database
Option Explicit
Public WithEvents m_LstBox As MSForms.ListBox
Public WithEvents m_obj As CustomControl' 初始化,将控件绑定到类'
' Make sure Forms(strWndName).Controls(strCtlName) is an msforms.listbox
Public Sub Init(strWndName As String, strCtlName As String, index As Long)
Dim i As Long
m_strWndName = strWndName
m_strCtlName = strCtlName
m_index = index
Set m_LstBox = Forms(strWndName).Controls(strCtlName).Object
Set m_obj = Forms(strWndName).Controls(strCtlName) '这一句报459运行时错误'
End Sub
那在 Access 中也可以叠加窗体呀。
这是 Windows 的规则,透明不仅不可见,鼠标消息也是直接穿透到下面的窗口上。
否则界面表现可以用一个词形容——见鬼了。
我没找到任何线索…………
对象或类不支持事件集试图对不能作为指定事件集的事件源的组件使用 WithEvents 变量。例如,您希望接收某个对象的事件,然后,创建了 Implements 该对象的另一个对象。虽然您可能认为您可以接收实现的对象的事件,但情况并非总是这样。Implements 只实现方法和属性的接口。专用 UserControls 不支持 WithEvents,因为引发 ObjectEvent 所需的类型信息在运行时不可用。更正此错误
无法接收不发起事件的组件的事件。
--来自http://msdn.microsoft.com/zh-cn/library/aty3352y(VS.80).aspx
也许我弄错了,我也不确定。记得TA在哪个帖子说自己married并且有孩子,找了半天没找到。
看了。还是不懂。主要是不知道Alpha 是管什么的……
255---> Opaque.Use API:
GetWindowLong()
SetWindowLong()
SetLayeredWindowAttributes()
曾经回答过一个 ListView 贴背景图片的问题。其实这个很类似。只要贴被它遮住的窗体位图即可“透明”。比较麻烦的是,每次更新后都要执行一次贴图,否则就变白了。