Office中国论坛/Access中国论坛

标题: 类模块实现多个按钮同一命令的疑问 [打印本页]

作者: gxstudent    时间: 2016-4-21 22:09
标题: 类模块实现多个按钮同一命令的疑问
类模块clsJobButton的代码:
Public WithEvents cmdJob As CommandButton

Private Sub cmdJob_Click()
    MsgBox "类模块"
End Sub

窗体有三个按钮cmdJob1~3,代码为:

Dim U(1 To 3) As New clsJobButton
Private Sub Form_Load()
    Dim i As Long
    Set U(1).cmdJob = Me.cmdJob1
    Set U(2).cmdJob = Me.cmdJob2
    Set U(3).cmdJob = Me.cmdjob3
End Sub
Private Sub cmdJob2_Click()

End Sub
Private Sub cmdjob3_Click()

End Sub


疑问:
按cmdJob1按钮不能触发类模块的msgbox“类模块”信息, 但cmdJob2和3按钮都可以。 我 猜测是不是窗体中还是要写上三个按钮的Click事件过程才能触发类模块函数? 不然为何按钮2和3都正常(即使Click事件为空),而按钮1(没有写任何Click事件代码)却没有作用。

请指教!

作者: gxstudent    时间: 2016-4-21 22:10
总感觉我猜测的是错误的!
作者: roych    时间: 2016-4-22 02:56
打个不太恰当的比方,我们把类模块看做一个炸药,
定义变量,表示买了三个炸药
窗体的加载事件表示,把这三个炸药埋在了三个地方,例如,公司,楼下,公交站旁。
控件的单击事件,就好比点燃引线。至于爆不爆,得看炸药到底有没有火药了(控件的私有化事件)。

现在总结下:
炸药是需要点火的,不点火是不会爆的。因此加载事件,实际上只是初始化类模块,如果没有控件的引发事件(点火),它永远都是哑炮。
作者: 风中漫步    时间: 2016-4-22 14:13
roych 发表于 2016-4-22 02:56
打个不太恰当的比方,我们把类模块看做一个炸药,
定义变量,表示买了三个炸药
窗体的加载事件表示,把这 ...

潜意识中有暴恐倾向啊,公司\公交站都是人口密集场所.装置的工作程序也非常了解,你是....
作者: gxstudent    时间: 2016-4-22 16:06
roych 发表于 2016-4-22 02:56
打个不太恰当的比方,我们把类模块看做一个炸药,
定义变量,表示买了三个炸药
窗体的加载事件表示,把这 ...

好吧, 虽然比喻比较暴力,
但是还是解释的很清楚的!
作者: tmtony    时间: 2016-4-23 08:23
roych 发表于 2016-4-22 02:56
打个不太恰当的比方,我们把类模块看做一个炸药,
定义变量,表示买了三个炸药
窗体的加载事件表示,把这 ...

这个比喻有些形象




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3