事件的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参数的说明。