Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何写一个公用的事件,在每个窗体的按钮进入时就判决,允许或不

周天华  发表于:2012-08-17 10:44:25  
复制

如何写一个公用的事件,在每个窗体的按钮进入时就判决,允许或不允许往下执行其单击事件。

Public Function ZZZ()
If 条件 = 1 Then
MsgBox "不能执行"
'“想不执行按钮的单击事件”
ElseIf 条件 = 2 Then
'“继续执行按钮的单击事件”
'
End If


如有一窗体中的的按钮BBB,他的事件如下:
Private Sub BBB_Click()
MsgBox "你单击了此按钮。"
End Sub

我想通过在按钮BBB【进入】写入=ZZZ()来控制是否往下执行单击事件。

如果条件为=1时,并不执行单击按钮的单击事件,结果是:
"不能执行"
如果条件为=2时,直接执行单击按钮的单击事件,结果为:"你单击了此按钮。"


或者有更好的办法,请指教!

 

Top
在水一方 发表于:2012-08-17 13:02:44

参照2003 订单模板 模块‘全局代码’  窗体加载判断自定义函数



纵云梯 发表于:2012-08-17 14:30:09
用类做一个:点击下载此附件

dbaseIIIer 发表于:2012-08-18 01:10:41

1楼的就可以了!

 

建立一个 公共模块,里面建立

 

Function ZZZ()

 '  检查状态

  if .... then

       ZZZ=1

  else

       ZZZ=2

  end if

End Function

 

在窗体的模块就可以

 

Private Sub BBB_Click()

if  ZZZ()=2 then

   MsgBox "你单击了此按钮。"

end if
End Sub



dbaseIIIer 发表于:2012-08-18 01:18:38

如果真的想分开两个事件的话

 

公共模块的 ZZZ改成

Public Function ZZZ()

   if ...  then  '不允许情况

       docmd.cancelEvent

   end if

end function

 

 

窗体的事件里面就是

Private Sub BBB_Click()

   msgbox "...."

End Sub

 

要多加一个事件 不是【进入】而是【鼠标释放】

=ZZZ()

 

因为【单击】 事件 和 【双击】事件 都是由 【鼠标释放】 来触发的。

你禁止【进入】控件,就连用户按[Tab]键都不能游过这个控件,

造成用户用键盘操作时候的困难了!

 



周天华 发表于:2012-08-19 19:22:23

谢谢4楼详细的回答,我来试一试

 



周天华 发表于:2012-08-19 19:45:38
谢谢4楼的详细回答,我是实在不想在所有的窗体的各个按钮中加入代码,所以才有这样的想法,我刚才试了,是可行,但我同时在键按下也写下=zzz(),才能防止用户按[Tab]键游到这个控件上按【Eenter】继续控件的执行事件,请问我这样对不对?

 



dbaseIIIer 发表于:2012-08-20 01:30:09

docmd.CancelEvent 会把正在处于处理的 Event 取消冒泡的。

 

如果你在 [按下] 事件 =ZZZ() 了,就是 Tab 键游到这个按钮之后,按什么键都没反应了。

如果这是你想要的效果,当然没问题。

 

如果我做程式就不会这样做了,因为我做的程式全部教人怎么用快捷键,设置好默认按钮,

输几个字,Tab 多少下后,回车就保存记录的!

让输入员达到最高的效率的,我觉得这是我们做软件开发很重要的一个任务。

 

 

 

不过我也有很多程式 按钮是不会获得焦点的(TabStop=False),要用那些按钮,就必须得用鼠标,

还要我在标题里面设置 的快捷键的,没有 TabStop 的按钮,点击后(或按快捷键后)还是获得焦点的。

如果你真的是想屏蔽 键盘 按钮的话,又不想在 Click 事件监测的话,

第一,不要设置快捷键,

第二,不要设置 默认按钮,或者取消按钮(这个是窗体 捕获了 回车 和 ESC 按键后自动执行的按钮)

第三,设置 鼠标释放(MouseUp) "=ZZZ()"

第四,你就在 窗体的 键预览(KeyPreview) 设置为 True

第五,加入一个事件处理

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If ActiveControl.ControlType = acCommandButton Then
        If ActiveControl.OnMouseUp = "=ZZZ()" Then
            If KeyCode = 32 Then

                If .... 决定是否屏蔽 Then
                    KeyCode = 0

                End If
            End If
        End If
    End If
End Sub

 

不过其实我觉得你还是用 按钮的 Enabled = False 来得简单一点!

把所有你要屏蔽的控件的 “标签”设置为 ZZZ

监测事件,然后

For each c in me.Controls

if c.Tag = "ZZZ" Then

c.Enabled = False

End If

Next

Enabled = False 后,你就不用处理那么多事件了!对于你开发大型的应用,除错上面会是更有效率的。当然是情况允许才可以!



总记录:7篇  页次:1/1 9 1 :