RadioButton in Formularen

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: RadioButton in Formularen

von Toxitom » Mi, 13.09.2006 13:29

Hey Steffan, *,

ich versuche mal ein bischen Klarheit in die Optionsbutton-Geschichte zu bringen. So ganz einfach ist das nicht und so ganz "logisch" auch noch nicht, eben weil die Behandlung unterschiedlich ist zwischen Formularen und Dialogen.
Also:
Damit intern eine Abhängigkeit der Optionsbuttons hergestellt wird, muss bei Formularen der Name gleich sein. Das habt ihr ja schon erkannt.
Nun habt ihr eine Gruppe von Optionsfeldern (intern) und die wird auch so behandelt. Um an diese heranzukommen, nutzt ihr nun die Methode "getGroupByName()", wobei diese diverse Parameter erwartet (zur Not in API nachlesen).
in 2.x bekommt ihr die Gruppe dann so:

Code: Alles auswählen

Dim aOpt()     'Array, welches die Optionselemente aufnimmt
oForm.getGroupByName("opt", aOpt)
"opt" ist dabei der Name der Optionsfelder (alle gleich), der jetzt acuh Gruppenname ist. Der Array speichert nun alle Objekte, die dann wieder einzeln abgefragt werden können:

Code: Alles auswählen

for i = LBound(aOpt) to UBound(aOpt)
  if aOpt(i) state then
     msgbox "Ausgewählt wurde: " & aOpt(i).label
  end if
next
Ausgegeben wird jetzt die Beschriftung (label) der Option. Genauso kann man natürlich jetzt auch die einzelnen Optionsfelder identifizieren - über die Beschriftung. Oder, man nutzt den zusätzliche Eigenschaft "Tag", der man schon bei der Konstruktion einen Wert mitgeben kann - zur eindeutigen Identifizierung :-)
Über diese Konstrukte kannst du dann auch deine entsprechenden Optionen erledigen., das wäre die "saubere" Lösung.
Es geht aber natürlich auch, wie ihr es gelöst habt :-)

Gruss
Thomas

von Steffan » Mi, 13.09.2006 09:48

Hallo,

@Stephan:
Du hast schon recht. Wer lesen (suchen) kann , ist klar im Vorteil (mich eingeschlossen). Allerdings bleibt der Fakt, dass man bei einer Optiongroup irgendwie erwartet, dass es eine einfache Lösung gibt, die den ausgewählten Radiobutton wiedergibt (z.B. State), was unbegreiflicherweise nicht so ist. Sowohl deine als auch meine Lösung muten da schon etwas konstruiert an. Wobei ich meiner wohl auf Grund der Codelänge den Verzug geben würde, ist aber Ansichtssache!

@Mino:
Meine Makros "Beim Aulösen" markieren / demarkieren die entsprechenden Radiobuttons und setzen den Wert für die globale Variable iState (bei mir 1-4). Nach dem Klick wird diese Variable gepeichert! Jetzt kannst Du noch diverse sonstige Einstellungen an deinem Formular vornehmen und bei der Auswertung iState abfragen, dann weisst Du doch welcher Button gewählt ist. Wo ist das Problem? Die MsgBox-Zeile habe ich lediglich zur Demonstration reingenommen, die kannst Du natürlich löschen.

Steffan.

von Stephan » Di, 12.09.2006 21:19

der erste Thread des Basic-Forums bietet da einige Auswahl und schon das obenstehende banale StarBasic-Programmierhandbuch bietet reichlich Info, auch für diesen Thread hier.
Oder die Suchfunkttion des Forums benutzen? Kann man sowas hier finden:
viewtopic.php?t=457&highlight=optionsbutton

ich habe mir auch erlaubt die damals entstandene Beispieldatei rauszusuchen und online zu stellen:
http://www.prooo-box.org/%7Eschmidjo/do ... ular-c.sxw


Gruß
Stephan

von Mino » Di, 12.09.2006 20:04

Hallo Steffan,

vielen Dank für die schnelle Antwort und die Mühe.
Mich tröstet, dass ich anscheinend eine intelligente Frage gestellt habe. :D

Nachdem ich die RadioBottons ebenfalls mit opt1 .... opt4 bezeichnet habe und die Zeile

Code: Alles auswählen

oOpt=ThisComponent.drawpage.forms.getbyName("Standard").getbyname(sName)
etwas angepasst habe

Code: Alles auswählen

oOpt=ThisComponent.sheets.getByName("Tabelle1").drawpage.forms(0).getbyName(sName)
hat der Code prima funktioniert.

Allerdings war meine Frage nicht präzise genug formuliert.
Nachdem ich ein RadioBotton ausgwählt habe, möchte ich in dem Formular weitere Einstellungen vornehmen. Erst dann möchte ich eine Aktion über eine Befehlsschaltfläche ausführen.
Somit kann ich das Ereignis "Beim Auslösen" für die RadioBottons leider nicht nutzen.
Meine Gedanken sind aber folgende:
Um auf einem Formular in OpenOffice die Funktionalität der RadioBottons zu gewährleisten, müssen alle zusammengehörigen RadioBottons den gleichen Name haben.
"Tief im Inneren von OpenOffice" muß das Programm also wissen:
RadioBotton(1) ist z.Z ausgewählt = Status1. Wenn RadioBotton(2) ausgewählt wird, setze den Status von RadioBotton(1) auf 0 und den Status von RadioBotton(2) auf 1. Ähnlich wie in Deinem Beispiel.
Aber wie :?

Ich hoffe dass wir über das Forum noch einige Gedanken austauschen können, denn aus Büchern allein wird man wohl nicht schlau.

Viele Grüße
Mino

von Steffan » Di, 12.09.2006 16:52

Hallo Mino,

wirklich ein total seltsames Verhalten, ich hab das ganze mal nachvollzogen und kann es so bestätigen. Damit ist die Funktionalität der RadioButtons in einem Formular ja völlig aufgehoben, die Verwendung funktioniert (meiner Meinung nach) nur wenn Du einen Umweg gehts:

- 4 Radiobuttons im Dokument mit unterschiedlich Namen (bei mir opt1, opt2, opt3 und opt4), nicht gruppiert!

Code: Alles auswählen

Global iState

Sub Change1
	call change(1)
end Sub
Sub Change2
	call change(2)
end Sub
Sub Change3
	call change(3)
end Sub
Sub Change4
	call change(4)
end Sub


Sub change(iOpt as integer)
	for i=1 to 4
		sName="opt" & cStr(i)
		oOpt=ThisComponent.drawpage.forms.getbyName("Standard").getbyname(sName)
'Form-Name ggf. anpassen
		if i<>iOpt then
			oOpt.state=0
		else
			oOpt.State=1
		endif
	next
	iState=iOpt
	msgbox iState
end sub
Den einzelnen Radiobuttons die Ereignismakros (Bei Auslösen) zuweisen:
opt1 -> change1
opt2 -> change2 etc.
Die variable iState enthält dann die Nummer des jeweils gewählten Buttons.

Das ganze ist zwar etwas umständlich, aber sollte funktionieren.

Steffan.

RadioButton in Formularen

von Mino » Mo, 11.09.2006 19:02

Hallo zusammen,

ich habe in ein Formular vier RadioButton eingefügt.
Bei der Auswahl sollen natürlich unterschiedliche Aktionen ausgeführt werden. Damit die Funktionalität (nur ein aktiver Button) gewährleistet ist, müssen alle RadioButton den gleichen Namen haben. (Bei unterschiedlichen Namen kann ich alle RadioButton gleichzeitig auswählen)
Wie kann ich dann dem ausgewählten Button eine Aktion zuweisen?

Code: Alles auswählen

Sub Auswahl
     oForm =  ThisComponent.sheets.getByName("Tabelle1").drawpage.forms(0)
	  MsgBox oForm.getByName("RadioButton").state
End Sub
Bei dem Code wird nur der Status "1" angezeigt, wenn der erste RadioButton angewählt wurde. Bei der Auswahl der anderen Button, erhalte ich den Status "0"

In einem Dialog scheint das geschilderte Problem schon wieder anders auszusehen.

Ich hoffe, das mir jemand weiterhelfen kann.
Vielen Dank im voraus

Mino

Nach oben