以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  新手问e是什么?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=22150)

--  作者:Fotable
--  发布时间:2012/8/4 7:12:00
--  新手问e是什么?

很多代码中都有e.什么的

这个e是什么

有没有声明

我想每一个新手都应该有这个疑问?

但搜索论坛和帮助都没有发现解答。


--  作者:wjl-se
--  发布时间:2012/8/4 17:56:00
--  

应该是这个:

http://www.foxtable.com/help/topics/0604.htm


--  作者:wjl-se
--  发布时间:2012/8/4 17:58:00
--  
链接有问题,打开帮助,搜索"事件的e参数"
--  作者:Fotable
--  发布时间:2012/8/4 23:11:00
--  

引用窗口和控件

在窗口或控件的事件代码中,如果要引用本窗口,请尽量用e参数:e.Form。
例如窗口中有一个按钮,希望单击这个按钮能够关闭本窗口,该按钮的Click事件代码应该设置为:

e.Form.Close()

如果通过窗口名称来引用:

Forms("窗口1").Close()

一旦之后因为某种原因,需要修改窗口名称,那么你将不得不修改相关事件代码。

同样在控件的事件代码中,如果要引用控件本身,也应该使用e参数:e.Sender,例如:

If User.Group = "经理" Then
    e.Sender.ReadOnly = BooleanEnum.
False
Else

    e.Sender.ReadOnly = BooleanEnum.
True
End
If

如果采用控件名称来引用,那么一旦需要修改控件名称,就必须同步修改代码


--  作者:Fotable
--  发布时间:2012/8/5 22:24:00
--  

事件的e参数

发生任何一个事件,总是会有一些和事件相关的信息,需要通知到系统。
这些信息是通过事件的e参数来获得的,几乎所有的事件都有一个e参数,不同事件的e参数属性是不同的。

例如DataColChanged事件,它会在某一列的内容发生变化后触发,其e参数就包括三个属性:

e.DataTable : 发生变化的表
e.DataCol:    发生变化的列
e.DataRow:    发生变化的行

通过这三个属性,我们能够知道变化发生的具体位置,即在e.DataTable(表)的e.DataRow(行)的e.DataCol(列)发生了变化。
如果没有e参数,DataColChanged事件也就没有了意义。

同样是表事件,e参数属性也会有所不同的,例如AfterEdit事件,这个事件在编辑单元格后触发,它的e参数属性有:

e.Table: 编辑的表
e.Row:   编辑的行
e.Col:   编辑的列

这是因为同一个DataTable会有多个Table,我们无法直接编辑DataTable的,而只能是编辑其中一个Table,所以AfterEdit的e参数属性需要告诉系统,编辑的是哪一个Table、哪一个Row、那一个Col。
我们知道Table有一个DataTable属性,用于返回该Table所属的DataTable,同样Row通过DataRow属性,返回该Row所属的DataRow,Col通过DataCol属性,返回该Col所属的DataCol,这样在AfterEdit事件中,同样可以快速获得DataTable层级的对象:

e.Table.DataTable
e.Row.DataRow
e.Col.DataCol

所以实际上,AfterEdit事件的e参数提供了更多的信息,可以追踪到具体的Table。
某些事件的e参数提供了DataTable层级的对象,而某些事件的e参数提供的却是Table层级的对象,有的用户会对此感到很疑惑,希望上面的说明能够帮助大家“释疑”。

此外也有个别事件没有e参数,例如项目事件AfterOpenProject,此事件在打开项目后执行,显然这样的事件并不需要通过e参数来传递什么信息的。

在编辑事件代码的时候,代码编辑器会提供该事件的说明,当然也包括e参数的说明。

 

楼上更清楚了