Je suis en train de brancher une méthode avec l'événement Application.ItemLoad:Comment capturer l'événement OutlookContact.Write?
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}
qui vérifierait si l'article est en cours ContactItem. S'il s'agit d'un ContactItem, il vérifiera si la propriété ContactItem.User4 contient la valeur xxx
. Si ContactItem.User4 contient une valeur xxx
, il accrochez une autre méthode avec l'événement ContactItem.Write:
void Application_ItemLoad(object Item)
{
if (Item is Outlook.ContactItem)
{
Outlook.ContactItem contact = (Outlook.ContactItem)Item;
System.Windows.Forms.MessageBox.Show("A new contact is loaded into memory");
try
{
string user4 = contact.User4;
bool isSynchronized = user4 != null && user4.Contains("xxx");
if (isSynchronized)
{
contact.Write += propertyChangeHandler;
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show("An error occurred: "+e);
}
}
}
Maintenant, le problème est, chaque fois que je tente d'accéder à la propriété ContactItem.User4, je reçois une exception:
System.Runtime.InteropServices.COMException: Les propriétés de l'élément et les méthodes ne peuvent pas être utilisées dans cette procédure événementielle.
Que dois-je faire pour ne pas avoir l'erreur ci-dessus?
Merci d'avoir lu ma longue question et j'attends vos suggestions avec impatience.
Merci pour la réponse. Le problème dans l'exécution des étapes de Application_ItemLoad avec l'événement NewInspector est que propertyChangeHandler est accroché plusieurs fois avec l'événement ContactItem.Write. Pouvons-nous nous assurer qu'il n'est accroché qu'une seule fois? – craftsman
Vous devez déconnecter le gestionnaire après la fermeture de l'inspecteur. Utilisez l'inspecteur ((Outlook.InspectorEvents_10_Event)) .Close + = new Outlook.InspectorEvents_10_CloseEventHandler (Inpsector_Close); ' – SliverNinja
Et où dois-je mettre ce code? Si je l'insère dans le gestionnaire d'événements NewInspector, CloseEventHandler sera à nouveau attaché plusieurs fois avec un inspecteur. De plus, la méthode de rappel Inspector_Close n'a aucun paramètre. Même si je connecte cette méthode avec un événement Close, comment vais-je obtenir une référence à l'inspecteur ou à l'élément en cours de l'événement Write dont j'ai besoin pour déconnecter un gestionnaire? – craftsman