1

PropertyGrid の動的型記述フレームワーク ( http://www.codeproject.com/Articles/415070/Dynamic-Type-Description-Framework-for-PropertyGri )で遊んでいます。

そして、イベント ハンドラー ロジックを追加することで、わずかな障害にぶつかりました。例に従って、新しいアイテムを追加するときに、EventHandler を「AddValueChanged」に割り当てました。

// "OnPropCChanged" is hardcoded here.
Dyn.TypeDescriptor td = Dyn.TypeDescriptor.GetTypeDescriptor(propertyGrid1.SelectedObject);
Dyn.PropertyDescriptor pd = new Dyn.PropertyDescriptor(propertyGrid1.SelectedObject.GetType( ), "PropC", typeof(string), "Hello world",
pd.AddValueChanged(propertyGrid1.SelectedObject, new EventHandler(this.OnPropCChanged));
td.GetProperties( ).Add(pd);

そして、イベント ハンドラー:

private void OnPropCChanged( object sender, EventArgs e )
{
// "PropC" is hardcoded here.
Dyn.PropertyDescriptor pd = Dyn.TypeDescriptor.GetTypeDescriptor(sender).GetProperties( ).Find("PropC", true) as Dyn.PropertyDescriptor;
string sNewValue = pd.GetValue(sender).ToString();
MessageBox.Show("New value is: " + sNewValue);
}

これはすべて正常に機能しますが、アイテムごとに 1 つずつ、複数のメソッドが必要です。私がやりたいのは、編集されたアイテムのラベル/名前が利用できるグローバル/オーバーライドを実装することです。上記のオブジェクト/ EventArgs を介してこれを取得できないようです。

現在、以下のように、変更されたメソッドを呼び出すだけの複数のメソッドがあります。

private void FooChanged( object sender, EventArgs e )
{
    changed(sender, "Foo");
}

private void BarChanged( object sender, EventArgs e )
{
    changed(sender, "Bar");
}

private void changed( object sender, string change )
{
    switch(change)
    {
          case "Foo": break; // Do Foo actions
          case "Bar": break; // Do Bar actions
    }
}

以下のようなものを実装しようとしていますが、すべてを結び付ける/ AddValueChanged イベントに割り当てる方法がわかりません。

private void FooBarChanged( object sender, PropertyChangedEventArgs e )
{
    string change = e.PropertyName.ToString();
    switch(change)
    {
          case "Foo": break; // Do Foo actions
          case "Bar": break; // Do Bar actions
    }
}

次のように EventHandler を渡す必要があるようです: PropertyDescriptor.AddValueChanged(object component, EventHandler handler)

4

0 に答える 0