Gå til innhold

Hvordan låse en Radiobuttons eller en Groupbox


Anbefalte innlegg

Hei,

 

Holder på å lage en spørreundersøkelse i form av det program laget med Delphi 6. Jeg har flere Groupboxes med Ja / Nei alternativer i hver. Jeg har også laget en teller som teller antall Ja og antall Nei etter hvert som svarene blir svart på.

 

Problemet er at hvis jeg velger Ja og Nei ettepå i samme Groupbox teller telleren det som at jeg har svart Ja en gang og Nei en gang.

 

Jeg kunne jo løst problemet med at Hvis jeg svarte Nei etterpå så satt den integeren som teller antall Ja til -1 slik at jeg visket vekk det første svaret. Men hva hvis jeg svarer Nei først ?

 

Hvordan kan jeg da "locke" en GroupBox eller RadioButton slik at etter du har svart så gjør det slik at man ikke kan forandre på svaret ? Alternative løsninger er selvfølgelig velkomne.

 

Håper på hjelp.

Takk !

Lenke til kommentar
Videoannonse
Annonse

Vanskelig spørsmål, men eg nekter å tru at det ikkje finns ein enklare måte å gjere det på. Om du sett alle til Ja i byrjinga, og gjer følgjande for kvart klikk på nei;

Code:

Dec(JaCounter);
Inc(NeiCounter);

 

For kvar Ja, gjer du følgjande;

Code:

Inc(JaCounter);
Dec(NeiCounter);

 

Problemet med dette er at du då får problem med at om du klikkar fleire gonger på samme Nei, vil JaCounter tilslutt forsvinne under 0.

 

Problemet her er at TRadioButtons ikkje har ein OnChange-event, noko som ville løyst heile problemet. Eg veit rett og slett ikkje kva du skal gjere med dette for øyeblikket. Kjem tilbake når eg har ein løysning... :smile:

 

Kva med å bruke RadioGroups i staden?

Lenke til kommentar
  • 3 uker senere...

Trenger du til en hver tid å se hvor mange ganger brukeren har svart ja eller nei? Er det en positivitets-test der du ikke ønsker å la brukeren gå videre dersom han ikke er nok positiv da... :smile:

 

Spøk til side; Jeg foreslår følgende løsning:

 

En groupbox har en itemindex som sier hvilket element som er valgt. Problemet med OnClick-eventet er at denne kalles også dersom brukeren klikker på det valget som allerede er krysset av. Du ønsker å oppdatere telleren din kun dersom itemindex'en endres.

 

Du må derfor ta vare på det forrige valget som ble gjort. Alle komponenter i delphi har en liten lekker 'Tag' property. Husker jeg lurte veldig på hva den var til en gang i tiden. Etter hvert har jeg funnet svaret: Alt!

 

Sett itemindexen i alle groupboxene til 0 - la oss si at dette er 'Ja' valget. Initier derfor 'AntallJa'-telleren til så mange ja/nei valg du har. F.eks. 10 for ti groupboxer. 'AntallNei'-telleren setter du til 0.

 

I OnClick() eventet til groupboxene skriver du følgende kode:

 

Code:

//Sjekke om endring er foretatt:
if TRadioGroup(Sender).Tag <> TRadioGroup(Sender).ItemIndex then
begin
//Dersom 'Ja':
if TRadioGroup(Sender).ItemIndex = 0 then
begin
inc(AntallJa);
dec(AntallNei);
end
//Dersom 'Nei':
else
begin
dec(AntallJa);
inc(AntallNei);
end;
//Ta vare på valget som er gjort:
TRadiGroup(Sender).Tag := TRadioGroup(Sender).ItemIndex;
end;

 

Hvis du vil kan du gjøre det enda litt mer avansert. Sett ItemIndex til -1 og tag til -2 på alle groupbox'ene. Da kan du initialisere begge teller-variablene til 0. Inne i OnClick prosedyren må du da tråkke litt mer varsomt før du dekrementerer telleren. Koden skulle da bli noe slikt:

 

Code:

if TRadioGroup(Sender).ItemIndex = 0 then
inc(AntallJa)
else
inc(AntallNei);
//Forrige valget var 'Ja', men det er det ikke lenger...
if TRadioGroup(Sender).Tag = 0 then
dec(AntallJa)
else
dec(AntallNei);

 

Håper det gjør susen!

 

-Vegar

 

BTW: Hvorfor i alle dager blir det dobbel linjeavstand når man bruker 'CODE' BBcode?

 

 

[ Denne Melding var redigert av: Format71 på 2002-12-02 23:59 ]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...