Seite 1 von 1
[gelöst] Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 15:48
von sven-my
Hallo Experten,
in einem Basic-Dialog habe ich einen CommandButton (übernehmen) eingebaut, der den Dialog beendet, und die eingegebenen Daten übernimmt.
Nun bräuchte ich auch die Möglichkeit diesen Dialog, ohne Übernahme der Daten, abzubrechen, und wollte dafür ebenfalls einen CommandButton nehmen.
(Ich habe etliche Adressen, bei denen der Name gleich ist, aber der Ansprechpartner sich unterscheidet. Da kommt es schon mal vor, daß ich den falschen Datensatz erwische.)
Frage : wie kann ich unterscheiden, welcher Button, bzw. ob der "Abbrechen"-Button angeklickt wurde ?
für den "übernehmen"-Button habe ich in den Eigenschaften/Art der Schaltfläche 'ok' eingestellt.
Hier der Code, wie er z.Z. besteht.
Code: Alles auswählen
rem --- Abfrage Versandart ---
dim vorgabe(1), oComboBox1 as object, zeile(5) as string, oDialog2 as object
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dialog2
oDialog2 = CreateUnoDialog(oForm)
rem --- Text vorgeben ---
oComboBox1 = oDialog2.GetControl("ComboBox1")
zeile(0) = aAdr(13)
zeile(1) = "- per eMail -"
zeile(2) = "- per Fax -"
zeile(3) = "- per Bote -"
zeile(4) = "- E eigenh. -"
zeile(5) = "- E RSch -"
for i = 0 to 5
if i = 0 then oComboBox1.Text=zeile(i)
oComboBox1.addItem (zeile(i),i)
next i
vorgabe(1) = empAll 'Empfänger_Alles
oDialog2.getControl("TextField1").Text = vorgabe(1)
rem --- Text auslesen ---
oDialog2.execute()
Vart = oComboBox1.Text
oDialog2.endexecute()
aAdr(13) = Vart
gruß
sven-my
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 21:04
von F3K Total
Hallo,
es gibt da mehrere Wege:
Wenn Du dem Button "Abbruch" Art der Schaltfläche "Abbruch" zuordnest und dem Button "OK" eben Art der Schaltfläche "OK" dann passiert folgendes:
Drückst Du den Button "Abbruch", wird der Dialog geschlossen und das Makro direkt nach "dialog.execute" beendet, quasi ein "exit Sub".
Drückst Du den Button OK, wird der Dialog geschlossen und das Makro direkt nach "dialog.execute" fortgeführt.
Kommst Du damit klar?
Ich mache es meist anders:
- Art der Schaltfläche "Standard"
- Unter den Eigenschaften des Button gibt es eine Zeile "Zusatzinformation", englisch: tag
- Hier schreibe ich z.B beim OK-Button true und beim Abbruchbutton false hinein.
- Das folgende Makro ordne ich dann bei beiden Buttons dem Ereignis "Aktion ausführen" zu.
Code: Alles auswählen
Sub S_Button (event)
dim btag as boolean
bTag = event.source.model.tag
if bTag = true then
msgbox "OK-Button gedrückt"
else
msgbox "Abbruch-Button gedrückt"
endif
end sub
Was passiert:
Das Event (Ereignis) -gebundene Makro liest über
die Zusatzinformation des
gerade gedrückten Knopfes aus. D.H. ich gebe dem Makro mit "event..." die Information, welcher Knopf das Makro ausgelöst hat. Z.B. mit if else endif entscheidet das Makro dann, was geschehen soll.
Vorteil: Man kann über verschiedene Zusatzinfomationen und z.B. die case - Anweisung auch deutlich mehr als zwei Knöpfe verarbeiten, oder dem Makro einen unterschiedlichen Text oder Wert, je nach Knopf, mitgeben, wie z.B 0,19 für 19% Ust und 0,07 für 7% Ust.
Viel Erfolg, Gruß R
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 21:26
von sven-my
Hallo R.,
Wenn Du dem Button "Abbruch" Art der Schaltfläche "Abbruch" zuordnest und dem Button "OK" eben Art der Schaltfläche "OK" dann passiert folgendes:
Drückst Du den Button "Abbruch", wird der Dialog geschlossen und das Makro direkt nach "dialog.execute" beendet, quasi ein "exit Sub".
so ähnlich hatte ich mir das gedacht, aber in der Praxis scheint es bei mir anders zu laufen.
Wenn dem so wäre, müßte ja die alte Adresse erhalten bleiben, wenn ich "Abbruch" drücke, aber es wird die falsch ausgewählte weiterverarbeitet; d.h. der Rest des Makros (nach >aAdr(13) = Vart<) weitergeführt. Daher habe ich das 'drangegeben', und hier im Forum nachgefragt.
Ich will aber auch nicht ausschließen, daß mir beim Vergleich der Adressen ein Fehler unterlaufen ist.
Da ist mir die zweite Möglichkeit schon viel sympathischer.
Um nicht noch einmal, vor Müdigkeit, die Welt des Basic nicht mehr zu begreifen, werde ich das erst morgen ausprobieren.
Vielen Dank erstmal, ich melde mich wieder mit den Ergebnissen meiner Bemühungen.
gruß
sven-my
P.S.: hab's doch ausprobiert (Tip 1) - es ist tatsächlich so, wie schon gesagt, das Makro wird weiter abgearbeitet.
Denkfehler von mir : Dialog wird abgebrochen, aber nicht das eigentliche Makro ! Asche auf mein Haupt.
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 21:55
von sven-my
Hallo R.,
die zweite Version habe ich auch ausprobiert, aber da kommt die Fehlermeldung : Objektvariable nicht belegt
in der Zeile
Code: Alles auswählen
oDialog2.execute()
Vart = oComboBox1.Text
1.Versuch
oDialog2.endexecute()
2.Versuch
Da, wo 'n.Versuch' steht, habe ich Deinen gesamten code eingefügt. Der Rest (siehe Eingangsfrage) ist so geblieben.
War es eigentlich richtige diese Zeile
in diese zu ändern ?
gruß
sven-my
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 21:59
von DPunch
Servus
sven-my hat geschrieben:Hallo R.,
Wenn Du dem Button "Abbruch" Art der Schaltfläche "Abbruch" zuordnest und dem Button "OK" eben Art der Schaltfläche "OK" dann passiert folgendes:
Drückst Du den Button "Abbruch", wird der Dialog geschlossen und das Makro direkt nach "dialog.execute" beendet, quasi ein "exit Sub".
so ähnlich hatte ich mir das gedacht, aber in der Praxis scheint es bei mir anders zu laufen.
Das war auch eine etwas unsaubere Aussage, denn tatsächlich wird das Makro nach dem Schliessen des Dialogs *immer* direkt nach dem ".execute" fortgeführt, egal auf welche Art der Dialog geschlossen wurde.
Ein Dialog hat aber, wie auch z.B. die Messagebox, einen Rückgabewert, der Aufschluss gibt:
Direkt nach dem Schliessen des Dialogs hat die Variable, in diesem Fall nDialogResult, diesen Rückgabewert, den Du weiterverwenden kannst, gespeichert.
0 = Abbruch, 1 = OK.
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 22:08
von F3K Total
Hallo DPunch,
da warst Du schneller,
ich hatte gerade herausgefunden, dass ich völlig falsch lag und war am Tippen:
Hier ein kurzes Beispiel:
Code: Alles auswählen
...
nReturn = oDlg.execute()
If nReturn = 1 then
msgbox "OK"
else
msgbox "Abbruch"
endif
end sub
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 22:15
von F3K Total
sven-my hat geschrieben:Da, wo 'n.Versuch' steht, habe ich Deinen gesamten code eingefügt. Der Rest (siehe Eingangsfrage) ist so geblieben.
War es eigentlich richtige diese Zeile
in diese zu ändern ?
Hallo Sven,
nein war es nicht.
Du kannst das Makro, das den Buttos zugeordnet ist, nicht in dein eigentliches Makro einbauen, sondern benötigst ein eigenes.
Dieses Makro wird bei Knopfdruck ausgelöst.
Es hat in der Benennung der Sub eben das (event) stehen, was bei dir als fehlend angemeckert wird.
Es ist also etwas komplizierter, weil du die Variablen an das zweite Makro übergeben musst.
Ich empfehle dir die von DPunch vorgeschlagene Version mit dem Rückgabewert.
Gruß R
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 22:25
von sven-my
Hallo Dpunch,
mit
bekomme ich für "übernehmen" eine '1' und für "abbrechen" eine '0' - Spitze so reicht es völlig aus ~ was aber stört : ich muß jeden Button
zweimal drücken.
gruß
sven-my
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 22:29
von DPunch
Servus
sven-my hat geschrieben:ich muß jeden Button zweimal drücken.
Wie macht sich das bemerkbar? Was passiert beim ersten Auslösen des Buttons? Passiert das auch, wenn Du ganz einfach einen neuen Button im Dialog anlegst, diesen Button bei "Art der Schaltfläche" auf "Ok" (oder "Abbrechen") setzt und ihn betätigst?
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 22:48
von sven-my
Hallo Dpunch,
es macht sich folgendermaßen bemerkbar (egal, ob ursprünglicher, oder neuer CommandButton):
1. klicken - absolut keine Reaktion
2. klicken - der Dialog-Rahmen(?) verschwindet, und je nach gedrücktem Button wird die Adresse übernommen, oder die letzte bleibt erhalten.
gruß
sven-my
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 23:00
von DPunch
Servus
Du hast aber nicht zweimal
in Deinem Code, oder?
beinhaltet sozusagen 2 Schritte auf einmal - nämlich das Ausführen des Dialogs (rechts des Gleichheitszeichens) und sobald das Ausführen abgeschlossen ist, das Speichern des Rückgabewertes (links des Gleichheitszeichens).
Deine Schilderung hört sich stark danach an, als hättest Du das oDlg.execute einmal frei im Code stehen, so wie Dein Code ursprünglich war, und hättest dann einfach die empfohlene Zeile
dahinter eingefügt. Jedes .execute führt den Dialog aus, egal in welchem Zusammenhang, selbst ein
wird den Dialog ausführen.
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Di, 28.08.2012 23:14
von sven-my
Hallo DPunch,
hast völlig Recht ! Es war zwimal >oDialog2.execute< in dem Makro
Jetzt klappt es. Herzlichen Dank und eine gute Nacht wünsch ich Dir.
Hab' schon ganz eckige Augen.
gruß
sven-my
Re: Basic-Dialog Schaltfläche (CommandButton) abfragen
Verfasst: Mi, 29.08.2012 11:20
von sven-my
Hallo R., hallo Dpunch,
jetzt, da ich wieder aufnahmefähig bin, habe ich mir das Ergebnis nochmal angesehen:
Herzlichen Dank an Eucg beide - so wie das Makro, und der Dialog jetzt läuft, ist er für mich perfekt.
gruß
sven-my