我一直在使用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处理程序)