Seite 1 von 1

bekomme ein Dialog auch nicht geschlossen

Verfasst: Sa 6. Jun 2020, 12:31
von K-LOFF
moin,

habe mir was übern Dialog zusammen gesucht, bekomme diesen aber nicht geschlossen.
Das ist dazu mein Code:

Code: Alles auswählen

Dim oDialog1 As Object
'-------------------------------------------------
Sub Begin
	Dialog1Show
End Sub
'-------------------------------------------------
Sub Dialog1Show
    DialogLibraries.LoadLibrary("Standard")
    oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
    oDialog1.Execute()
End Sub
'-------------------------------------------------
Sub Btn2_Click '              Abbrechen
	oDialog1.setVisible(False)
	oDialog1.endexecute()
		oDialog1.dispose()
End Sub
Die Sub 'Btn2_Click' ist wirkungslos. Wie bekomme ich den Dialog geschlossen?

Re: bekomme ein Dialog auch nicht geschlossen

Verfasst: Sa 6. Jun 2020, 12:59
von craig
Hallo,

Code: Alles auswählen

Dim oDialog1 As Object
'-------------------------------------------------
Sub Begin
	Dialog1Show
End Sub
'-------------------------------------------------
Sub Dialog1Show
    DialogLibraries.LoadLibrary("Standard")
    oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )
    oDialog1.Execute()
End Sub
'-------------------------------------------------
Sub Btn2 '              Abbrechen
'	oDialog1.setVisible(False)
	oDialog1.endexecute()
'		oDialog1.dispose()
End Sub
Mit oDialog1.setVisible(False) setzt Du den Dialog auf nicht
sichtbar, kurioserweiser bleibt er in diesem Fall trotzdem sichtbar. Vermutlich weil nur ein Dialog verwendet wird.
Weil unsichtbar, führt dies zu dem Konflikt, dass das Event oDialog1.endexecute() nicht ausführbar ist.

Sollte Office abstürzen, wenn oDialog1.dispose() ausgeführt wird, dann bitte auskommentieren.
Ich weise aber daraufhin, wenn Du mal einen Listener programmierst, muss dispose()
für das Listener-Ereignis unbedingt vorhanden sein, sonst wird dieses nicht korrekt beendet.

----------------------------------------------------------------------
Dies funktioniert bei mir:

Code: Alles auswählen

Sub Btn2 '              Abbrechen
	oDialog1.endexecute()
End Sub

Code: Alles auswählen

Sub Btn2_Click  
Diese VBA-/VB-typische Anweisung verwende ich grundsätzlich nur,
bei Listener-Ereignissen, weil diese dort unbedingt erforderlich sind.
siehe hier...
Deshalb vermeide ich Unterstriche bei gewöhnlichen Routine- und Funktionsnamen.

Re: bekomme ein Dialog auch nicht geschlossen

Verfasst: Sa 6. Jun 2020, 14:00
von K-LOFF
@ craig: Danke schön. Das hat schon mal geklappt.

Beim Testen davor, ist mir der ganze Rechner abgeschmiert. Das hab ich dabei noch nie gehabt.

Mal sehen, ob ich die anderen Buttons auch hinbekomme.

Re: bekomme ein Dialog auch nicht geschlossen

Verfasst: Sa 6. Jun 2020, 14:55
von craig
Hallo,
Beim Testen davor, ist mir der ganze Rechner abgeschmiert. Das hab ich dabei noch nie gehabt.
Der Dispose-Bug besteht schon länger :x
Betrifft scheinbar nur das saubere Entladen von Dialogen.
Dannenhöfer hat geschrieben:Aber Achtung um den Dialog bei Bedarf wirklich aus dem Speicher zu löschen muß noch Dialog.dispose() ausgeführt werden.
Leider führt der Befehl bei einigen Installationen zu Abstürzen. Daher muß man unter Umständen darauf verzichten.
Dannenhöfer: Siehe hier...