2

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

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

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

4

2 回答 2

3

您可以做的是重用我在此处对这个问题的回答中描述的 DynamicTypeDescriptor 类:找不到实体框架创建的属性的 PropertyGrid Browsable,如何找到它?

像这样:

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);
于 2013-08-08T07:55:35.370 回答
0

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

var props = myComObject.GetType().GetProperties();
foreach (var prop in props)
{
    MessageBox(prop.Name);
}
于 2013-08-08T06:41:49.273 回答