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

自定义类中的VB.NET事件处理程序代码首先在对象本身事件处理程序代码之前运行,vb.net,class,events,triggers,Vb.net,Class,Events,Triggers,我创建了自己的类c_DataGridView,继承自DataGridView。现在在这个类中,我实现了事件CellEndEdit 现在,我在我的表单上创建了一个名为myGrid1的此类/控件的实例,然后在我的表单上实现了相同的网格事件 现在,当我运行表单并编辑网格上的单元格时,事件触发序列是:首先是我的类c_DataGridView的CellEndEdit事件触发,然后是在表单触发器上实现的对象事件 我是否有可能首先触发c_DataGridView对象的事件,然后触发类的事件本身 我希望我已经澄

我创建了自己的类c_DataGridView,继承自DataGridView。现在在这个类中,我实现了事件CellEndEdit

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

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

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


我希望我已经澄清了

根据你的评论,我会走另一条路

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


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

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


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

在您的问题中,似乎对event和eventhandler有些混淆。如果我明白你所说的,那么在表单上使用BeforeCellEndEdit可能会更好。您想要做的问题是,您可能使组件依赖于表单,这是因为我在自定义类中合并了数组,当事件CellEndEdit触发时,它会从单元格更新数组值。很好。但当我试图操纵和更新一个单元格的值时,比如一个名为“Amount”的coulmn,它基于“Percentage”列下的另一个单元格,我必须在表单上执行此操作。我现在想要的是,应该首先计算出这个计算(表单上的事件处理程序),然后类的事件处理程序应该trigger.Excellent。它完全按照我的要求完成了工作。(我还将代码改为OnCellValueChanged方法,而不是OnCellEndEdit方法)。另外,请让我知道,我在哪里可以找到MSDN文档中的解释?