2014-10-23 2 views
0

У меня есть следующий объект Com:Reflection для COM-объекта

public interface ParagraphFormat2 : _IMsoDispObj 
{ 
    [DispId(2)] 
    MsoParagraphAlignment Alignment { get; set; } 
    [DispId(1610743808)] 
    object Application { get; } 
    [DispId(3)] 
    MsoBaselineAlignment BaselineAlignment { get; set; } 
    [DispId(4)] 
    BulletFormat2 Bullet { get; } 
    } 

Мне нужно установить Пули собственность, поэтому я утомительно использовать отражение, но неудачно: - первый попробовать:

PropertyInfo prop = typeof(Microsoft.Office.Core.ParagraphFormat2) 
         .GetProperty("Bullet", BindingFlags.Public | 
              BindingFlags.Instance | 
              BindingFlags.GetProperty); 

if (null != prop && prop.CanWrite) 
{ 
    prop.SetValue(objParagraphFormat, bullet, null); 
} 

Вторая попытка:

typeof(Microsoft.Office.Core.ParagraphFormat2) 
        .GetField("Bullet", BindingFlags.PutDispProperty | 
             BindingFlags.PutRefDispProperty) 
        .SetValue(objParagraphFormat, new object[] { bullet }); 

Любые идеи, как это можно сделать?

ответ

0

Вы не установите Bullet свойства, можно использовать Bullet свойство для получения BulletFormat2 объекта, а затем установить свойство этого объекта.

Как так:

objParagraphFormat.Bullet.Type = MsoBulletType.msoBulletUnnumbered; 
objParagraphFormat.Bullet.Visible = MsoTriState.True; 

Это не должно быть необходимо использовать отражение, чтобы делать то, что вы делаете.

Объяснение: Объект Bullet не имеет самостоятельного существования, его единственная цель - удобная группировка для различных свойств параграфа и связанных с пулями объектов.

Другими словами, на самом деле это все свойства абзаца - объект пули существует только для того, чтобы сделать вещи немного более аккуратными и читаемыми.

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