Hi, ich habe ein Problem bei der Verarbeitung von Visio Events und zwar dann, wenn bei einer Aktion mehr als ein Event ausgelöst wird, dass ich benutze.
Zum Verständnis möchte ich kurz meine Programmstruktur erläutern: Zum Abfangen der Events aus Visio habe ich ein Com Add-In anhand der MSDN Anleitung geschrieben:
http://msdn.microsoft.com/en-us/library/aa158815(v=office.10).aspx (Lesson 1 und 2). Über eine Named Pipe schicke ich beim Auftreten eines Events einen String
an ein VB Programm, in dem je nach Event Aufgaben ausgeführt werden sollen. Das funktioniert soweit auch einwandfrei. Das Problem taucht nun beim "ShapeAdded" Event auf. Wird das Event ausgelöst generiere ich im Com Add-In eine UniqueID,
die ich über die Pipe an das VB Programm übergebe. Von dort möchte ich dann auf das Shape zugreifen (Befehl: visio.page.shapes.item(UniqueID)), um daran Einstellungen vorzunehmen, wie z.B. das Ändern der Farbe eines Rechtecks etc. Beim
Rechteck klappt das auch noch, jedoch nicht mehr beim dynamischen Verbinder. Dieser löst neben dem ShapeAdded Event noch gefühlte 27 weitere Events aus. Hier liegt wahrscheinlich das Problem.
Beim Auftreten des ShapeAdded Events des dyn. Verbinders kann ich nicht auf das Shape zugreifen. Anscheinend platziert Visio das Shape erst, wenn alle Events abgearbeitet wurden, die durch ein Shape ausgelöst werden. Das Resultat: Sobald ich auf das
Shape zugreifen möchte läuft das VB Programm in eine Endlosschleife - ein Fehler wird nicht generiert. Da auch ein Zugriff auf die "Page" nicht möglich ist, vermute ich, dass Visio sich in einer Art undefiniertem Zustand befindet und nicht adressierbar
ist.
Hat jemand eine Idee, wie ich das Problem lösen kann? Ein Ansatz von mir wäre, alle Events eines Objekts zu sammeln und diese abschließend in einem Rutsch zu verarbeiten. Jedoch kenne ich kein Event, dass mir eine Fertigmeldung generiert,
wenn alle Events eines Objekts (in diesem Fall dyn. Verbinder) abgearbeitet wurden, noch fällt mir eine kluge Möglichkeit ein, dies im VB Programm zu erkennen.
Vielen Dank für eure Hilfe!!