正在寻找一种在PropertyGrid中动态更改字段名称的方法

本文关键字:动态 改字段名 方法 一种 寻找 PropertyGrid | 更新日期: 2023-09-27 18:27:00

我已将COM对象附加到属性网格。

Type typeObj = Type.GetTypeFromProgID(progIdService);
var obj = Activator.CreateInstance(typeObj);
propertyGrid1.SelectedObject = obj;

现在我需要一些方法来使用翻译器将对象字段翻译成我的语言。我试图使用包装对象,但对于COM对象,我没有PropertyInfo,只有PropertyDescription,所以我仍在寻找所有可能的变体。

正在寻找一种在PropertyGrid中动态更改字段名称的方法

您可以重复使用我在SO上回答此问题时描述的DynamicTypeDescriptor类:实体框架创建的属性找不到PropertyGrid可浏览的属性,如何找到它?

像这样:

DynamicTypeDescriptor dtp = new DynamicTypeDescriptor(typeObj);
// get current property definition and remove it
var current = dtp.Properties["ThePropertyToChange"];
dtp.RemoveProperty("ThePropertyToChange");
// add a new one, but change its display name
DynamicTypeDescriptor.DynamicProperty prop = new DynamicTypeDescriptor.DynamicProperty(dtp, current, obj);
prop.SetDisplayName("MyNewPropertyName");
dtp.AddProperty(prop);
propertyGrid1.SelectedObject = dtp.FromComponent(obj);

我认为可以使用反射来获取属性名称,尽管我还没有尝试使用COM对象。请确保包含System.Reflection命名空间,然后可以这样使用它:

var props = myComObject.GetType().GetProperties();
foreach (var prop in props)
{
    MessageBox(prop.Name);
}