2013-08-08 3 views
2

У меня есть COM-объект, прикрепленный к сетке свойств.Ищете способ динамического изменения имен полей в PropertyGrid

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

Теперь мне нужно каким-то образом перевести поля объектов на мой язык с помощью какого-либо переводчика. Я пытался использовать обертку вокруг объекта, но с COM-объектом у меня нет PropertyInfo, у меня есть только PropertyDescription, поэтому я все еще ищу все возможные варианты его выполнения.

ответ

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); 
+0

изменил его на 'DynamicTypeDescriptor dtp = new DynamicTypeDescriptor (typeObj, pd);' и 'OriginalProperties = TypeDescriptor.GetProperties (obj);' и теперь он отлично работает! Спасибо. – Cynede

0

Я думаю, вы можете использовать отражение, чтобы получить имена свойств, хотя я еще не пробовал объекты COM. Обязательно включать System.Reflection пространства имен, то вы можете использовать его так:

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

'.GetProperties()' пусто для COM-объекта. Как я уже сказал, я могу работать только с 'PropertyDescription' (' TypeDescriptor.GetProperties (instance) '), но все же я не знаю, что с ним делать. – Cynede

+0

Вы правы, это из-за Поздней привязки. Пожалуйста, взгляните на это сообщение для деталей: http://stackoverflow.com/questions/9735394/reflection-on-com-interop-objects – Robert

+0

, поэтому мне нужен другой способ. – Cynede

 Смежные вопросы

  • Нет связанных вопросов^_^