...全文
265 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhone99 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 slowgrace 的回复:]
问题还没解决,所以不能结帖。

可我未结帖超过限制,不能发帖了,无奈只好移动一哈:)
[/Quote]

上有政策,下有对策
倒大霉的上帝 2009-12-09
  • 打赏
  • 举报
回复
o ,还可以自己移动未结贴啊。
slowgrace 2009-12-09
  • 打赏
  • 举报
回复
问题还没解决,所以不能结帖。

可我未结帖超过限制,不能发帖了,无奈只好移动一哈:)
倒大霉的上帝 2009-12-09
  • 打赏
  • 举报
回复
灵异事件:09年6月2号的帖子竟然浮到第一页了?
舉杯邀明月 2009-12-09
  • 打赏
  • 举报
回复
哦,‘移动’就浮到面上了?
gunge88 2009-06-02
  • 打赏
  • 举报
回复
我看看!!
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
Forms(strTreeWnd).Controls(strTreCtlName).OnGotFocus = "m_ocxTree_GotFocus"

这条语句不行。报错:Access找不到宏“m_ocxTree_GotFocus”。
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
啊?这种用法我常用啊?一般是像下面这么用

Forms(strTreeWnd).Controls(strTreCtlName).OnGotFocus = "[Event Procedure]"


其中的"[Event Procedure]"是不能改的,就必须是这俩词儿,这么写完之后,系统就会自动调用对应的事件过程(用对象名加下划线加事件名标识的那种)

难道你的意思说,我直接这么写:

Forms(strTreeWnd).Controls(strTreCtlName).OnGotFocus = "m_ocxTree_GotFocus"


i try try哈
Tiger_Zhao 2009-06-02
  • 打赏
  • 举报
回复
机制不一样,用 OnGotFocus 指定类似于回调函数,不可能在事件列表中找到。
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 Tiger_Zhao 的回复:]
这样才比较合理,如果每个 ActiveX 都需要自己编程封装一下微软的设计也太差了。

好像是通过 OnGotFocus 属性来指定关联的事件响应,不知道在类中可不可以用。
[/Quote]

可以指定。这不是问题的关键。

关键在于,我得不到gotfocus事件,就是说,在VBA IDE的代码编辑区的顶端右侧的事件列表里没有gotfocus, 除非我把m_ocxTree设置为withevents。

可是另一方面,把m_ocxTree设置为withevents会报错……
Tiger_Zhao 2009-06-02
  • 打赏
  • 举报
回复
这样才比较合理,如果每个 ActiveX 都需要自己编程封装一下微软的设计也太差了。

好像是通过 OnGotFocus 属性来指定关联的事件响应,不知道在类中可不可以用。
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
麻烦的是,貌似CustomControl类型是通用类型,不支持withevents的。

因为我在CTreeCtl类里试图初始化ocxTree,下面这句会报错“对象或类不支持的事件集”
Set m_ocxTree = Forms(strTreeWnd).Controls(strTreCtlName)

如果把Private WithEvents m_ocxTree As CustomControl 改成
Private m_ocxTree As CustomControl

就不会报错。可是酱紫我也得不到gotfocus事件了。


真够纠结的
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
我在CTreeCtl类里设了个成员变量:Private WithEvents m_ocxTree As CustomControl

这样在对象框里选m_ocxTree,过程列表框里就有gotfocus
slowgrace 2009-06-02
  • 打赏
  • 举报
回复
刚才发现,在ACCESS VBA里,当在ACCESS窗体上添加一个treeview控件时,系统自动把它封装在一个叫做customcontrol的容器里。

也就是:

?TypeName(me.TreeView0)
CustomControl

?TypeName(me.TreeView0.object)
TreeView

Tiger_Zhao 2009-06-02
  • 打赏
  • 举报
回复
看来不行,要求指定的是,不是函数名。
slowgrace 2009-05-14
  • 打赏
  • 举报
回复
唉。实践表明,许多在VBA中的问题在VB6中不是问题。
slowgrace 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 Tiger_Zhao 的回复:]
与是否用 Object 属性无关。

“封装”通常是指将某个对象、控件用另外一个对象、控件包起来,外部不用直接调用被封装的对象,只要调用外部容器就能完成功能。
当然有时候也会将一些内部对象的方法、属性通过容器的同名方法、属性来间接进行调用。
如果是一对一的封装就比较接近继承机制。只是 COM 标准是没有继承的,所以用封装。

在 Access 中“封装”,是因为 TreeView 没有你要的事件或属性,我想 Access 自己的 …
[/Quote]

那个treeview是标准的SP6的treeview啊。你确定在VB里那么用不会丢事件么?
Tiger_Zhao 2009-05-13
  • 打赏
  • 举报
回复
与是否用 Object 属性无关。

“封装”通常是指将某个对象、控件用另外一个对象、控件包起来,外部不用直接调用被封装的对象,只要调用外部容器就能完成功能。
当然有时候也会将一些内部对象的方法、属性通过容器的同名方法、属性来间接进行调用。
如果是一对一的封装就比较接近继承机制。只是 COM 标准是没有继承的,所以用封装。

在 Access 中“封装”,是因为 TreeView 没有你要的事件或属性,我想 Access 自己的 UserControl 应该有相关的事件或属性,所以考虑用 UserControl 封装 TreeView。
slowgrace 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Tiger_Zhao 的回复:]
事件是控件定义的,它决定给你什么事件。
实践是检验的标准。
[/Quote]

为了检验它,费老了劲了。刚把VB6装上……
Tiger_Zhao 2009-05-13
  • 打赏
  • 举报
回复
事件是控件定义的,它决定给你什么事件。
实践是检验的标准。
加载更多回复(13)

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧