以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  在一个窗体中,在哪里设置本窗体公用的函数或过程?[已解决]  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98601)

--  作者:蓝才文百
--  发布时间:2017/4/1 19:30:00
--  在一个窗体中,在哪里设置本窗体公用的函数或过程?[已解决]
比如,在一个窗体里,我有一个步骤是通用的,目的是给本窗体各个控件一一对应赋值。
在本窗体的多个按钮中,会使用到这个通用的功能。目前能够实现的方式是在每一个按钮Click事件中,重复复制这些代码,如果可以有地方设置本窗体公用的函数或过程,那么只需要在各个按钮的Click事件中调用此函数(或过程)即可,这样代码右边维护也方便。
其实大家都懂的,我啰嗦这么多,简单说,就是类似vb的私有函数或过程,以前是在代码各个事件之外独立写一个就可以了,ft中好像没有地方写。
[此贴子已经被作者于2017/4/1 20:10:40编辑过]

--  作者:蓝才文百
--  发布时间:2017/4/1 19:46:00
--  
找到答案了:

全局事件

当我们选择窗口的事件页时,会发现除了窗口事件外,还有一组全局事件:

图片点击可在新窗口打开查看

全局事件不是窗口事件,而是控件事件。
全局事件对所有的控件有效,例如你在窗口单击任何一个控件,都会触发全局事件Click。

全局事件的作用有两个:

1、集中编写代码

例如窗口有四个按钮,分别是上一条、下一条、第一条、最末条,假定这四个按钮的名称分别为:btnPrev、btnNext、btnFirst、btnLast
如果按照之前的方法,我们需要分别为这四个按钮编写代码,代码分布在四个位置。
如果采用全局代码,只需在全局事件Click中加入以下代码即可:

Select Case e.Sender.Name
    
Case "btnPrev"
        
CurrentTable.Position = CurrentTable.Position - 1
    
Case "btnNext"
        
CurrentTable.Position = CurrentTable.Position + 1
    
Case "btnFirst"
        
CurrentTable.Position = 0
    
Case "btnLast"
        
CurrentTable.Position = CurrentTable.Rows.Count -1
End
 
Select

很难说分别编写和统一编写哪个更合理,这个纯粹看开发者的习惯。
提示:如果要使用全局事件,最好为每一个控件取一个有意义的名称,例如在维护的过程中,btnNext显然比Button1更容易让人理解。

2、为动态增加的控件编写事件代码

控件本身的事件代码只能在设计窗口的时候编写,所以如果需要在运行过程中动态增加控件,且需要为这些控件编写事件代码,那么就只能使用全局事件了。


--  作者:蓝才文百
--  发布时间:2017/4/1 19:47:00
--  
我在全局事件中写代码即可。
如上述帮助的示例代码,我只要在end select之后写上通用代码即可。