2013-03-07 1 views
1

Comme le suggère le titre, je cherche un moyen d'obtenir l'élément qui a déclenché l'événement. I Bind Property_Change Evénement dans l'événement Application_ItemLoad dans lequel j'ai un objet que je ne peux pas utiliser. Après le lancement du Property_Change, j'ai besoin de l'élément qui a déclenché l'événement pour appeler ma fonction. Y a-t-il un moyen d'obtenir ceci? (Je sais que je peux obtenir l'élément ouvert en cours via ActiveExplorer, mais si les éléments sont modifiés dans la fenêtre principale, je reçois null).Outlook Ajouter Dans l'objet après l'événement Property_Change

code: ThisAddIn.cs

private Explorer _Explorer; 
private List<WrapperItem> list = new List<WrapperItem>; 

private void ThisAddIn_Startup(object sender, System.EventArgs e){ 
    _Explorer = this.Application.ActiveExplorer(); 
    _Explorer.SelectioNChange += _Explorer_SelectionChange; 
} 

void _Explorer_SelectionChange() 
{ 
    list.Clear(); 
    foreach (MailItem mail in _Explorer.Selection) 
    { 
     list.Add(new WrapperItem(mail)); 
    } 
} 

Répondre

1

vous configurez un récepteur d'événements sur un point particulier, non? Quel est ton code? Si vous suivez des événements à partir de plusieurs objets, la règle de base consiste à créer votre propre classe wrapper qui contiendra un pointeur vers l'objet qui déclenche l'événement et implémentera le gestionnaire d'événements dans la même classe d'encapsuleur. De cette façon, lorsqu'un événement se déclenche, vous saurez quel objet l'a déclenché.

Une enveloppe d'échantillon (du haut de ma tête) peut ressembler à quelque chose comme

public class MailItemWrapper 
{ 
    public MailItem item; 
    public MailItemWrapper(MailItem OutlookItem) 
    { 
    item = OutlookItem; 
    item.PropertyChange += new System.EventHandler(PropertyChangeHandler); 
    } 
    private PropertyChangeHandler(string Name) 
    { 
    MessageBox.Show(string.Format("Property named {0} changed on item {1}", name, item.Subject)) 
    } 
} 
+0

semble raisonnable, pourriez-vous donner un exemple ou un lien sur la façon d'utiliser une classe wrapper dans cet incident spécifique? (Im les lier actuellement sur folders.items.propertchange – Florian

+1

Bien sûr, regardez l'exemple de code mis à jour ci-dessus –

+1

Aussi, ne jamais jamais définir des éviers d'événements sur tous les éléments d'un dossier - vous allez tuer votre système.Utilisez MAPIFolder.Items événements ou seulement Configurer les récepteurs d'événements sur les éléments de la collection Application.ActiveExplorer.Selection Supprimer les anciens éléments lorsque l'événement Explorer.SelectionChange se déclenche et ajouter les éléments dans l'Explorateur.Selection à la liste des éléments que vous effectuez le suivi –

Questions connexes