Office-Objekte, die eine Methode und ein Ereignis mit demselben Namen haben, wurden in den primären Interop-Assemblys für Office in zwei Objekte aufgespalten: ein Kernobjekt mit allen Eigenschaften und Methoden und ein Ereignisobjekt, das Ereignisse enthält, deren Name zu einem Konflikt mit einer Eigenschaft oder einer Methode führt. Diese Ereignisobjekte verwenden die Namenskonvention <Objektname>_Event. Wenn Sie ein erwartetes Ereignis nicht sehen, wandeln Sie es in die <Objektname>_Event-Schnittstelle um.
Es gibt zum Beispiel ein ActivateEvent-Ereignis und eine Activate-Methode für ein Workbook. Um dieses Ereignis zu behandeln, verwenden Sie WorkbookEvents_Event statt Workbook.
Erstellen Sie im Deklarationsabschnitt Membervariablen:
private Excel.Workbook wkbk;
private Excel.WorkbookEvents_Event wbEvents;
private Excel.WorkbookEvents_ActivateEventHandler activateEvent;
Verbinden Sie das Ereignis in _Startup:
wbEvents = (Excel.WorkbookEvents_Event)wkbk;
activateEvent = new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
wbEvents.Activate += activateEvent;
Schreiben Sie einen Ereignishandler:
private void ThisWorkbook_Activate()
{
// Your code goes here.
}
Sie müssen in WorkbookEvents_Event umwandeln, da Excel.Workbook.Activate die Activate-Methode und nicht das ActivateEvent-Ereignis zurückgibt.
Alternativ können Sie das Objekt in seine entsprechende Ereignisschnittstelle in Startup umwandeln:
((Excel.WorkbookEvents_Event)(Globals.ThisWorkbook.InnerObject)).Activate +=
new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
Schreiben Sie dann einen Ereignishandler für den Code:
private void ThisWorkbook_Activate()
{
// Your code goes here.
}