RadioButton? [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

RadioButton? [erledigt]

Beitrag 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
Zuletzt geändert von Wolfgang_B am Mi, 15. Feb 2017 9:13, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: RadioButton?

Beitrag 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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: RadioButton?

Beitrag 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
DXE_Radio_3State.jpg (64.23 KiB) 4001 mal betrachtet
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: RadioButton?

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: RadioButton?

Beitrag 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
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: RadioButton?

Beitrag 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 :D

Beste Grüße

Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Antworten