Mein Programm soll sich beenden, wenn das zugehörige Part geschlossen wurde.
Scheinbar kann man dies nur mit einem Timer erreichen, der immmer wieder nachsieht, ob das Part noch offen ist.
(Mir ist kein Event bekannt, das beim Schliessen eines Parts reagiert - oder gibt es sowas?)
Das funktioniert soweit. Ich verwende VB.NET 2008.
Alle paar Sekunden wird der TimerEventProcessor angesprungen:
Private Shared Sub TimerEventProcessor(ByVal myObject As Object, ByVal myEventArgs As EventArgs)
myTimer.Stop()
If SldWorksEventFrm.IstDokumentGeoeffnet(SldWorksEventFrm.oSwAppCls, SldWorksEventFrm.DateinamePART, False) Then myTimer.Enabled = True ' ist das zugehörige Part geöffnet ?
If Not myTimer.Enabled Then
'SolidWorks freigeben
SldWorksEventFrm.oSwPartCls = Nothing
SldWorksEventFrm.oSwDrawingCls = Nothing
SldWorksEventFrm.oSwAppCls = Nothing
' SldWorksEventFrm.oSwAssemblyCls = Nothing
'Formular schließen
SldWorksEventFrm.Hide()
SldWorksEventFrm.Close()
End If
End Sub
, der dann entsprechend der Function IstDokumentGeöffnet reagiert.
Public Function IstDokumentGeoeffnet(ByVal oSwApp As SldWorks.SldWorks, ByVal sDokument As String, ByVal bAktivierenWennGeoeffnet As Boolean, Optional ByRef bModelDocVisible As Boolean = False) As Boolean
Try
'Mal schauen was alles offen ist
Dim oSwAktuellModel As SldWorks.ModelDoc2
Dim bVorhanden As Boolean = False
oSwAktuellModel = CType(oSwApp.GetFirstDocument, SldWorks.ModelDoc2)
Do While Not oSwAktuellModel Is Nothing
If oSwAktuellModel.GetPathName.Length > 0 Then
If oSwAktuellModel.GetPathName = sDokument Then
bVorhanden = True
End If
If System.IO.Path.GetFileName(oSwAktuellModel.GetPathName) = sDokument Then
bVorhanden = True
End If
If System.IO.Path.GetFileNameWithoutExtension(oSwAktuellModel.GetPathName) = sDokument Then
bVorhanden = True
End If
Else
If oSwAktuellModel.GetTitle = sDokument Then
bVorhanden = True
End If
End If
If bVorhanden Then
bModelDocVisible = oSwAktuellModel.Visible
If bAktivierenWennGeoeffnet Then
oSwApp.ActivateDoc(oSwAktuellModel.GetTitle)
End If
Exit Do
End If
oSwAktuellModel = CType(oSwAktuellModel.GetNext, SldWorks.ModelDoc2)
Loop
Return bVorhanden
Catch ex As Exception
Debug.Assert(False)
Trace.WriteLine("Fehler: Wo: " & ex.StackTrace & " Was: " & ex.Message)
Return False
End Try
End Function
Nun kommt mein Problem.
Ich möchte mein Programm nur solange offen halten, wie das Part selbst geöffnet ist. Wenn das Part indirekt über ein Assembly offen ist, soll mein Programm schliessen. Ich kann jedoch beim Durchlaufen durch alle geöffneteten Dateien in IstDokumentGeoeffnet nicht unterscheiden, ob das Part direkt oder nur indirekt geöffnet ist.
Kann mir jemand helfen?
Gruß
Erwin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP