Foxtable(狐表)用户栏目专家坐堂 → 新手问e是什么?


  共有9268人关注过本帖树形打印复制链接

主题:新手问e是什么?

帅哥哟,离线,有人找我吗?
Fotable
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
新手问e是什么?  发帖心情 Post By:2012/8/4 7:12:00 [显示全部帖子]

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

这个e是什么

有没有声明

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
Fotable
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1015 积分:6979 威望:0 精华:0 注册:2012/8/1 18:41:00
  发帖心情 Post By: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参数的说明。

 

楼上更清楚了


 回到顶部