我已将COM对象附加到属性网格。
Type typeObj = Type.GetTypeFromProgID(progIdService);
var obj = Activator.CreateInstance(typeObj);
propertyGrid1.SelectedObject = obj;
现在我需要一些方法使用一些翻译器将对象字段翻译成我的语言。我试图在对象周围使用包装器,但是对于COM对象我没有PropertyInfo
,我只有PropertyDescription
所以我仍然在寻找所有可能的变体。
答案 0 :(得分:3)
你可以做的是重新使用我在这个问题的答案中描述的DynamicTypeDescriptor类,在SO:PropertyGrid Browsable not found for entity framework created property, how to find it?
像这样: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);
答案 1 :(得分:0)
我认为你可以使用反射来获取属性名称,尽管我还没有尝试使用COM对象。请确保包含 System.Reflection 命名空间,然后您就可以使用它:
var props = myComObject.GetType().GetProperties();
foreach (var prop in props)
{
MessageBox(prop.Name);
}