2012-03-05 7 views
0

スタックオーバーフローに関するメソッドが見つかりました。このメソッドは、指定されたイベントからすべてのイベントハンドラを取り除きます。しかし、プログラムにコードをコピーすると、「参照がインスタンスに設定されていません」というエラーが表示されました。ここでイベントハンドラのストリッパーコードが機能していない

は、問題のコードです:

 FieldInfo f1 = typeof(Control).GetField("DocumentCompleted", 
     BindingFlags.Static | BindingFlags.NonPublic); 
     object obj = f1.GetValue(browser); 
     PropertyInfo pi = browser.GetType().GetProperty("Events", 
     BindingFlags.NonPublic | BindingFlags.Instance); 
     EventHandlerList list = (EventHandlerList)pi.GetValue(browser, null); 
     list.RemoveHandler(obj, list[obj]); 

エラーがこの行に起こった:

object obj = f1.GetValue(browser); 

ブラウザオブジェクトは、Webブラウザーのインスタンスであり、そしてそれは、この時点ではインスタント化されています。


編集:別の方法でハンドラを削除してください。

+0

エラーはそれが設定されていないf1'それは 'だことを示すことになるあなたのエラーが発生します。 – ChrisF

+0

この 'FieldInfo f1 = typeof(Control).GetField(" DocumentCompleted ")'を試してください。 BindingFlagsを削除する – ebattulga

+0

まだヌル、それは私のために働いていない。 – TheGateKeeper

答えて

2

DocumentCompletedは公開イベントではなく、プライベート静的フィールドなので、f1はnullで、

+0

私は "FieldInfo f1 = typeof(コントロール).GetField(" DocumentCompleted "、BindingFlags.Public);" しかし、f1はまだnullです。 – TheGateKeeper

+0

GetEvent( "DocumentCompleted"、BindingFlags.Public)を使用します。 – linquize

関連する問題