PropertyGrid / PropertyDescriptor AddValueChanged EventHandler Overide

时间:2015-01-03 09:47:13

标签: c# override propertygrid eventhandler propertydescriptor

我一直在使用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);
}

这一切都很好,但需要多个方法,每个项目一个。我想要做的是实现一个全局/覆盖,其中编辑项目的标签/名称可用;因为我似乎无法通过上面的object / 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(对象组件,EventHandler处理程序)

0 个答案:

没有答案