Seite 1 von 1
RadioButton? [erledigt]
Verfasst: So, 12. Feb 2017 15:42
von Wolfgang_B
Hallo,
ich stehe momentan wieder mal auf dem Schlauch.
Ich habe 3 Radio Buttons. Wie kann ich elegant auslesen bzw. wie die ausgewählte Caption in einer Funktion weiterverarbeiten? Problemstellung -> ich möchte aus 3 Rechnungsarten eine auswählen und diese Information mit anderen Daten in einer Funktion per Pushbutton (STORE_Rechnungsart(xxx)) weiterverarbeiten bzw. die Caption in der DB speichern.
In der Beschreibung vom RadioButton Objekt ist ein ähnliches Beispiel. Hier wird die Caption mit "bSelected := {|mp1,mp2,obj| QOut( obj:caption ) }" ausgelesen. Ich habe testweise aus QOut -> MsgBox probiert und bekomme hier auch brav die Caption vom selektierten RadioButton. Wie kann ich jetzt damit weiterarbeiten? Vom Typ (VALTYP(bselected) ist das ein B -> Codeblock. Sagt mir aber nix ...
Beste Grüße
Wolfgang
Re: RadioButton?
Verfasst: So, 12. Feb 2017 17:19
von peternmb
Wie wäre es z.B. mit einer If-Schleife
Code: Alles auswählen
if radio1:getData()
mach_das()
elseif radio2:getData()
mach_dies()
else
mach_sonstwas()
endif
Re: RadioButton?
Verfasst: Mo, 13. Feb 2017 2:50
von AUGE_OHR
hi,
Wolfgang_B hat geschrieben:Ich habe 3 Radio Buttons. Wie kann ich elegant auslesen bzw. wie die ausgewählte Caption in einer Funktion weiterverarbeiten?
Radiobutton treten üblicherweise in einer Group auf.
Es kann nur ein Radiobutton aktive sein.
leider wird das nicht automatisch geregelt d.h. man muss selbst dafür sorgen das die anderen nicht aktive sind.
---
XbpRadioButton() sollten, als Gruppe, den selben Parent haben z.b. Static-GroupBox
den o:
selected Callback Slot würde ich so aufbauen
Code: Alles auswählen
// jedes XbpRadioButton()
o:selected := {| lCheck, uNIL, oSelf | cCaption := CheckRadio(oSelf,oParent),;
IF(!EMPTY(cCaption), MachWeiter(cCaption),NIL) }
FUNCTION CheckRadio(oSelf,oParent)
LOCAL aChild := oParent:Childlist()
LOCAL i,iMax
LOCAL cCaption := ""
iMax := LEN(aChild)
FOR i := 1 TO iMax
IF aChild[i] = oSelf
aChild[i]:SetData(.T.)
cCaption := aChild[i]:Caption
ELSE
aChild[i]:SetData(.F.)
ENDIF
NEXT
RETURN cCaption
bei Verwendung der DXE LIB kann man auch solche Radio / 3-State Buttons machen
- DXE_Radio_3State.jpg (64.23 KiB) 4045 mal betrachtet
Re: RadioButton?
Verfasst: Mo, 13. Feb 2017 8:29
von brandelh
Auch wenn das im Beispiel so angezeigt wird (caption zur Anzeige wer aktiviert wurde),
im normalen Programm sollte man keine Verzweigung nach der Caption auswählen, spätestens wenn ein Kunde eine anderssprachige Version will hat man ein Problem.
Oder man muss die Beschriftung ändern ...
Als Anzeige in einer msgbox("Sie haben "+oRB:caption+" gewählt !") ist das natürlich was anderes.
Code: Alles auswählen
oRB_Ein:Selected := {|mp1,mp2,obj| "E" }
oRB_Aus:Selected := {|mp1,mp2,obj| "A" }
so kann man einen "Rückgabewert" festlegen und später im Programm prüfen ob "E" oder "A" zurückgegeben wurde, nach einem Select (mit der Maus).
Code: Alles auswählen
bekomme hier auch brav die Caption vom selektierten RadioButton. Wie kann ich jetzt damit weiterarbeiten?
Vom Typ (VALTYP(bselected) ist das ein B -> Codeblock. Sagt mir aber nix ...
du solltest die Grundlagen über Eventgesteuerte Programmierung lesen (Hilfe).
Die VARIABLE des Objekts wird mit einem Codeblock bestückt, der ausgeführt wird, nachdem ein Event (Maus selectiert den RB) ausgelöst wurde.
Falls man selbst einen codeblock auswerten möchte, kann man
Eval(bBlock) => Rückgabewert nutzen.
Re: RadioButton?
Verfasst: Mo, 13. Feb 2017 9:24
von Rolf Ramacher
Hallo Wolfgang
ich mache das so. Hier wähle ich aus "alle Saison" oder Saison von 1-9 diese information steht in einem Array
Code: Alles auswählen
bSelected := {|mp1,mp2,obj| aFelder[6][2]:=obj:caption }
oXbp := XbpRadiobutton():new( drawingArea, , {020,220}, {100,20} )
oXbp:caption := aFelder[6][1]
oXbp:tabStop := .T.
oXbp:setInputFocus:={ || HiliteSle( oXbp ) }
oXbp:selected:=bSelected
oXbp:create()
oXbp:setdata(.t.)
oXbp:killInputFocus:={ || DeHiliteSle( oXbp ) }
oStatic := XbpStatic():new( drawingArea,, {150,220}, {50,20} )
oStatic:options := XBPSTATIC_TEXT_LEFT
oStatic:caption := "oder"
oStatic:create()
aPos:={230,220}
For i = 1 to 9
oXbp := XbpRadiobutton():new( oDlg, , aPos, {40,20} )
oXbp:caption := strzero(i,1)
oXbp:tabStop := .T.
oXbp:setInputFocus:={ || HiliteSle( oXbp ) }
oXbp:selected:=bSelected
oXbp:create()
oXbp:killInputFocus:={ || DeHiliteSle( oXbp ) }
aPos[01]+=50
Next i
In der weiteren Ausdruckfuntion wird so ausgewertet:
Code: Alles auswählen
If aFelder[6][2]="Alle Saison"
cSaison:=aFelder[6][1]
lSai:=.f.
Else
cSaison:="Saison: "+aFelder[6][2]
lSai:=.t.
EndIf
funktioniert tadellos - vielleicht hiflt es dir
Re: RadioButton?
Verfasst: Mi, 15. Feb 2017 9:13
von Wolfgang_B
Hallo Kollegen,
herzlichen Dank für die Tipps,
ich habe mich für die Version von Rolf entschieden. Merci Rolf. Quick and dirty, funktioniert aber einwandfrei. Man muß allerdings die Situation abfangen, wenn nichts angeklickt wird und die Standardeinstellung übernommen wird. In diesem Fall wird sonst NIL zurückgegeben.
@Hubert - Du hast recht, das Studium theoretischer Grundlagen wären bestimmt hilfreich. Ein Selbststudium fällt mir aufgrund der spärlichen Dokumentation bzw. Literatur von Xbase++ allerdings sehr schwer. Ich werde mich aber redlich weiter bemühen
Beste Grüße
Wolfgang