Seite 1 von 1

Dialogfenster schließen

Verfasst: Fr, 28.04.2006 15:12
von turtle47
Hallo Programmierer,

ich öffne mit folgendem Makro ein Dialogfenster:

Code: Alles auswählen

Sub Feiertage
Dim Dlg As Object
Dlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
Dlg.Execute() 
Dlg.dispose()
Dlg.EndExecute() 
end Sub
Funktioniert auch wunderbar.
Jetzt möchte ich das Fenster über eine Schaltfläche wieder schließen.

Dazu habe ich fogende Information im Internet gefunden:
Schließen mit einem expliziten Programmaufruf

Ein geöffnetes Dialogfenster kann auch mit der endExecute-Methode geschlossen werden:

Dlg.endExecute()
Hier mein Code zum schließen:

Code: Alles auswählen

Sub Abbrechen
Dlg.endExecute()
end sub
Jetzt bekomme ich die Fehlermeldung: Basic-Laufzeitfehler
Hier im Forum habe ich schon gesucht, aber nichts gefunden.
Kann mir bitte einer helfen?

Jürgen

Verfasst: Fr, 28.04.2006 15:37
von Toxitom
Hey Jürgen,

dadurch, dass es funktioniert, ist es nicht ideal!

Code: Alles auswählen

Dlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
Dlg.Execute()
Dlg.dispose()
Dlg.EndExecute() 
Mit "dispose() entfernst du das Objekt aus de Speicher, danach schliesst du die Dialogmaske?? Also bitte. IN diesem Code sind zwei zeilen überflüssi!g:
Der Dialog wird mit dlg.excecute() aufgerufen. Das Makro bleibt jetzt solange in dieser Zeile stehen, bis der Dialog wieder geschlossen wird. Erst dann werden die weitern Zeilen abgearbeitet. Warum willst du einen Dialog, der schon geschlossen ist, nochmals zweimal schliessen? Jeder der folgenden Zeilen tut nämlich genau das, wobei die erste den Dialog auch noch aus dem Speicher befördert....
Also, beide Zeilen striechen.
Jetzt möchte ich das Fenster über eine Schaltfläche wieder schließen.
Wenn du es "nur" schliessen willst, dann definiere den Buttton über die Eigenschaften nicht als Standard-Button, sondern entweder als "Ja" button oder als "Abbrechen" Button. Dann schliesst sich jeweils dein Dialog - fertig. Den Rest kannst du dir dann ersparen.

Code: Alles auswählen

Sub Abbrechen
Dlg.endExecute()
end sub
Das ist vom Prinzip her richtig. Aber: erstens überflüssig, wenn du sonst nichts mehr machst - siehe oben - und zweitens : kann nur funktionieren, wenn dein Dialogobjekt auch global definiert wurde. Und das wurde es in deinem Code nicht - wie also soll OpenOffice.org mit "Dlg" etwas anfangen?
Richtig wäre:

Code: Alles auswählen

dim oDlg as object

sub Feiertage
  oDlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
  oDlg.Execute() 
end sub

Sub Abbrechen
  oDlg.endExecute()
end sub
Viele Grüße
Thomas

Verfasst: Fr, 28.04.2006 15:40
von kannenklaus
hallo jürgen

::ZUM SUB FEIERTAGE::
Dlg.dispose()
kann zu unerwünschten ergebnissen führen

Dlg.EndExecute()
wenn du willst, dass der dialog ausgeführt und nicht gleich beendet wird, solltest du beim sub feiertage die code-ziele endexecute kpl. rausnehmen. am besten du legst jeweils eine proezdur für das starten/beenden des dialogs anlegen.

::ZU DEN SCHALTFLÄCHEN::
in deinem dialog feiertag eine schaltfläche anlegen z.b. "Ende" und dieser beim auslösen das makro sub abbrechen zuwesein

alternativ kannst du eine schaltfläche als steuerelement erzeugen und mit der re-maus über eigenschaft den typ OK oder ABBRECHEN wählen.

grüße

klaus

Verfasst: Fr, 28.04.2006 16:07
von turtle47
Hallo Kannenklaus und Toxitom,

ihr seid ja schneller als die Polizei erlaubt mit Euren Anworten.

Entschuldigt bitte, aber was Basic anbetrifft bin ich noch total grün hinter den Ohren.

Funktioniert jetzt richtig supi.

Danke

Jürgen