[gelöst] Basic-Dialog Schaltfläche (CommandButton) abfragen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Basic-Dialog Schaltfläche (CommandButton) abfragen

Re: Basic-Dialog Schaltfläche (CommandButton) abfragen

von sven-my » Mi, 29.08.2012 11:20

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

Re: Basic-Dialog Schaltfläche (CommandButton) abfragen

von sven-my » Di, 28.08.2012 23:14

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

von DPunch » Di, 28.08.2012 23:00

Servus

Du hast aber nicht zweimal

Code: Alles auswählen

oDlg.execute
in Deinem Code, oder?

Code: Alles auswählen

nDialogResult = oDlg.execute
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

Code: Alles auswählen

nDialogResult = oDlg.execute
dahinter eingefügt. Jedes .execute führt den Dialog aus, egal in welchem Zusammenhang, selbst ein

Code: Alles auswählen

MsgBox oDlg.execute
wird den Dialog ausführen.

Re: Basic-Dialog Schaltfläche (CommandButton) abfragen

von sven-my » Di, 28.08.2012 22:48

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

von DPunch » Di, 28.08.2012 22:29

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

von sven-my » Di, 28.08.2012 22:25

Hallo Dpunch,

mit

Code: Alles auswählen

nDialogResult = oDlg.execute
MsgBox nDialogResult
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

von F3K Total » Di, 28.08.2012 22:15

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

Code: Alles auswählen

 bTag = event.source.model.tag
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

von F3K Total » Di, 28.08.2012 22:08

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

von DPunch » Di, 28.08.2012 21:59

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:

Code: Alles auswählen

nDialogResult = oDlg.execute
MsgBox nDialogResult
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

von sven-my » Di, 28.08.2012 21:55

Hallo R.,

die zweite Version habe ich auch ausprobiert, aber da kommt die Fehlermeldung : Objektvariable nicht belegt

in der Zeile

Code: Alles auswählen

bTag = event.oDialog2.model.tag

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

Code: Alles auswählen

    bTag = event.source.model.tag
in diese zu ändern ?

Code: Alles auswählen

bTag = event.oDialog2.model.tag
gruß
sven-my

Re: Basic-Dialog Schaltfläche (CommandButton) abfragen

von sven-my » Di, 28.08.2012 21:26

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

von F3K Total » Di, 28.08.2012 21:04

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

Code: Alles auswählen

event.source.model.tag
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

[gelöst] Basic-Dialog Schaltfläche (CommandButton) abfragen

von sven-my » Di, 28.08.2012 15:48

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

Nach oben