它看起来像你得到了事件本身,并且获得通过自己的实际事件处理程序EventArgs的参数之间的混淆。
当您注册来处理事件,有一对夫妇,你必须知道的事情。我将以你的ColumnChanged
事件为例。
第一个是你在登记事件是ColumnChanged
事件(似乎直线前进,但我把它出于清楚的缘故)。
第二个是为事件注册,您需要一个事件处理程序。该事件处理程序必须匹配该事件提供的委托签名。对于ColumnChanged,委托必须有两个参数:1)一个名为sender的对象,以及2)用于传递事件特定参数DataColumnChangedEventArgs
的对象。你的方法应该是这个样子:
public void ColumnChangedHandler(object sender, DataColumnChangedEventArgs e)
{
// Do some work here when the event is fired
}
之后你有,最后一步实际上是注册您的处理程序来处理事件:
someDataTable.ColumnChanged +=
new DataColumnChangeEventHandler(ColumnChangedHandler);
现在,如果你看看你的周围可能会注意到有些人使用快捷语法只需一个步骤来创建一个处理程序:
someDataTable.ColumnChanged += (object sender, DataColumnChangedEventArgs e)
{
// Do some work here when the event is fired
}
这将允许您创建一个匿名方法来处理事件,但是当我可能会导致问题t来清理对象并取消注册任何处理程序。
我同意贾斯汀。它看起来好像你在混淆事件(例如:RowChanged)和传递给这些事件的参数(例如:DataRowChangedEventArgs)。一个是事件,另一个是传递给事件的参数。 – Rod 2011-06-07 16:59:35
@Rod:是的,我需要更多的文章解释他们在事件处理中的“角色”。我意识到他们是不同的,但我是新来的事件处理,我真的想了解它的来龙去脉。 – developer 2011-06-07 17:01:12
更长的答案有助于更多(我在之前评论过你的初稿时)。谢谢:)我仍然需要更多的描述;知道任何可能会进一步深入的伟大链接? – developer 2011-06-07 18:45:11