它看起來像你得到了事件本身,並且獲得通過自己的實際事件處理程序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