Avatar billede friiiiis Novice
31. december 2011 - 15:02 Der er 4 kommentarer og
1 løsning

Radiobutton

Hej,

jeg har fire TRadioButtons på fire forskellige Groupboxe (derfor kan jeg ikke have en TRadioGroup som ellers ville løse problemet)

Jeg vil gerne lave det således at kun een af de fire radiobuttons er aktive - altså den som man senest har klikket på er aktiv...

Hvordan gør jeg det lettest?
31. december 2011 - 15:45 #1
Hej,

Et forslag:

RB1 = Radiobutton1;
Rb2 = ...
RB3 = ...
RB4 = Radiobutton4; 

V1 = 0 eller 1 : Integer;  // 0 = true ;  1 = false
V2 ...
V3 ....
V4 = 0 eller 1 : Integer;  // Eller BOOLEAN;

Procedure SetRadioButtons(V1,V2,V3,V4 : Integer);

BEGIN
    IF V1 = 0 then
      Radiobutton1.Checked := True
    else
      Radiobutton1.Checked := False;
    IF V2 = 0 then
      Radiobutton2.Checked := True
    else
      Radiobutton2.Checked := False;
    IF V3 = 0 then
      Radiobutton3.Checked := True
    else
      Radiobutton3.Checked := False;
    IF V4 = 0 then
      Radiobutton4.Checked := True
    else
      Radiobutton4.Checked := False;
END;

For hver RBx.click skal du så kalde SetRadioButtons(V1,V2,V3,V4); med de korrekte parametre (for at sette/resette RB'erne.

(Har prøvet det med 8 checkbokse og det har kørt upåklageligt.)

Kristian
Avatar billede kroning Nybegynder
01. januar 2012 - 10:03 #2
Sæt dine 4 RadioButtons OnClick event i Object Inspectoren til at kalde denne procedure:

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  RadioButton1.Checked:=false;
  RadioButton2.Checked:=false;
  RadioButton3.Checked:=false;
  RadioButton4.Checked:=false;

  with (Sender as TRadioButton) do
  begin
      OnClick:=nil;
    Checked:=true;
    OnClick:=RadioButton1Click;
  end;
end;
Avatar billede friiiiis Novice
01. januar 2012 - 12:45 #3
Snestrup2000 : Een af problemer er at hvis jeg sætter "Radiobutton1.checked := true" så vil det igangsætte OnClick proceduren. Hvis der i OnClick proceduren igen er et kald til "Radiobutton1.checked := true" så vil proceduren kalde sig selv igen og igen = rekursiv kald. Kronings procedure tager meget elegangt hensyn til det problem! Jeg håber det er svar på hvorfor Kroning får pointene; ellers tak for ultra hurtigt svar

Kroning: Smid et svar og du får pointene...
01. januar 2012 - 15:57 #4
HEJ

1: Osse tak til dig for hurtigt svar.

2: Af en eller anden grund kørte det upåklageligt hos mig.
(Men det var med Check-bokse - muligvis derfor -omend det næppe er tilfældet- men MÅSKE mere at det var en Delphi 4 S/C -udgave.)
Men det er rigtigt at OnClick.event'et trigges (som medfører recursiviteten - det tænkte jeg ikke på, da jeg skrev indlægget.)

Så det er ganske OK at du giver KRONING pointene.

2A:  Godt nytår.

Kristian
Avatar billede kroning Nybegynder
01. januar 2012 - 17:33 #5
ok, svar
Godt nytår.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester