VB.NET自定义类中的事件处理程序代码首先在对象本身事件处理程序代码之前运行

时间:2012-07-29 13:00:21

标签: vb.net class events triggers

我已经创建了自己的继承自DataGridView的类c_DataGridView。现在,在本课程中,我实现了事件 CellEndEdit

现在我在名为 myGrid1 的表单上创建了这个类/控件的实例,然后我还在表单上实现了相同的网格事件。

现在当我运行表单并在Grid上编辑一个单元格时,事件触发顺序是:首先我的类c_DataGridView的 CellEndEdit 事件触发,然后在表单上实现对象的事件触发。

我是否有可能设法先触发c_DataGridView对象的事件,然后再触发类的事件本身。

我希望我已经清除了自己。

2 个答案:

答案 0 :(得分:1)

触发事件处理程序的顺序是不可预测的。有一个标准模式来处理这个问题,.NET类总是有一个与事件同名的受保护方法,前缀为“On”。

因此,在派生类中,重写OnCellEndEdit()方法而不是订阅事件。您现在可以完全控制事件处理和触发的方式。您可以先调用base.OnCellEndEdit(),然后编写自定义代码。或者您可以最后调用它,首先编写自定义代码。或者你不能调用它,防止CellEndEdit事件被触发。显然,您现在可以完全控制订单,正确的方式取决于您想要完成的任务。

答案 1 :(得分:0)

根据你的评论我会采用不同的方式。

匹配行的类。 一个匹配行列表的类,具有BindingList属性。 然后我就把它绑在了网格上。 然后,当在行类中更改百分比时,更新Amount属性。这将触发属性更改事件,这将导致网格更新。

因此,请尝试将所有数据逻辑放在几个类中,而不是在表示层中的内部事件处理程序中。