プロパティとフィールドの値を取得したり、メソッドを呼び出したりするのは簡単ですが、イベント ハンドラーを表示するのは困難でした。PropertyInfo のように GetValue 関数を使用することはできません。
https://web.archive.org/web/20131213074318/http://bobpowell.net/eventsubscribers.aspxの指示に従ってみました- これはWindows Formsでイベントを表示するために機能します。
ただし、Silverlight には「EVENTHANDERLIST」がないため、これは Silverlight では機能しません。
Silverlight でイベント VALUES を表示する方法についてのアイデアはありますか?
私はこれを試しました
namespace eventhandlers
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Type t = sender.GetType();
FieldInfo fi = t.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
EventHandler eh = (EventHandler)fi.GetValue(sender);
System.Reflection.EventInfo[] eventInfo = button1.GetType().GetEvents();
Delegate[] dels = eh.GetInvocationList();
foreach(Delegate del in eh.GetInvocationList() )
{
string text = del.Method.Name;
textBlock1.Text = text + ". " + textBlock1.Text;
}
}
}
}
しかし、「FieldAccessException was unhandled by user code」というエラーが表示され、「SilverlightApp1.MainPage.button1_Click (System.Object, System.Windows.RoutedEventArgs)」メソッド「System.Windows.Controls.Primitives.ButtonBase._isLoaded」にアクセスできませんでしたフィールド。" で
EventHandler eh = (EventHandler)fi.GetValue(sender);