2009-08-24 11 views
3

Je suis en train d'énumérer les propriétés d'un objet Microsoft.Office.Interop.Outlook.ContactItem (appelons-ci) avec ce code:propriétés Énumération Perspectives ContactItem

 System.Reflection.BindingFlags bf = System.Reflection.BindingFlags.Default; 

     foreach (System.Reflection.PropertyInfo pi in ci.GetType().GetProperties(bf)) 
     { 
      Console.WriteLine("Property Info {0}", pi.Name); 
     } 

J'ai vraiment essayé plusieurs combinaisons de valeurs BindingFlag, mais aucune propriété n'est jamais retournée. Voici comment ContactItem est défini: en utilisant System.Runtime.InteropServices;

namespace Microsoft.Office.Interop.Outlook 
{ 
    [Guid("00063021-0000-0000-C000-000000000046")] 
    [CoClass(typeof(ContactItemClass))] 
    public interface ContactItem : _ContactItem, ItemEvents_10_Event 
    { 
    } 
} 

Voici comment _ContactItem est défini (je l'ai gardé que 3 accessoires pour la simplicité):

using System; 
using System.Runtime.InteropServices; 

namespace Microsoft.Office.Interop.Outlook 
{ 
    [TypeLibType(4160)] 
    [Guid("00063021-0000-0000-C000-000000000046")] 
    public interface _ContactItem 
    { 
     [DispId(14848)] 
     string Account { get; set; } 
     [DispId(63511)] 
     Actions Actions { get; } 
     [DispId(14913)] 
     DateTime Anniversary { get; set; } 
    } 
} 

Quelqu'un pourrait-il me aider?

Merci à l'avance

Bob

Répondre

5

vous n'avez pas besoin de définir les interfaces manuellement. Il suffit d'ajouter une référence à "Microsoft Outlook XX.0 Class Library" à votre projet C#, puis utiliser un code similaire à ceci:

using System; 
using Outlook = Microsoft.Office.Interop.Outlook; 

namespace OutlookTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Outlook.Application olApplication = new Outlook.Application(); 

      // get nameSpace and logon. 
      Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi"); 
      olNameSpace.Logon("Outlook", "", false, true); 

      // get the contact items 
      Outlook.MAPIFolder _olContacts = olNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 
      Outlook.Items olItems = _olContacts.Items; 

      foreach (object o in olItems) 
      { 
       if (o is Outlook.ContactItem) 
       { 
        Outlook.ContactItem contact = (Outlook.ContactItem)o; 
        foreach (Outlook.ItemProperty property in contact.ItemProperties) 
        { 
         Console.WriteLine(property.Name + ": " + property.Value.ToString()); 
        } 
       } 
      } 
      Console.WriteLine("Press any key"); 
      Console.ReadKey(); 
     } 
    } 
} 

Hope this helps.

- Frank

Questions connexes