Øsse Skrevet 11. november 2002 Del Skrevet 11. november 2002 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
BBC Skrevet 11. november 2002 Del Skrevet 11. november 2002 Har ikke Delphi foran meg, men hva hvis du gjør det slik: Første gangen brukeren klikker på knappen, så disabler du radio-knappen ("radiobutton1.disable := TRUE" eller noe sånn). Dermed kan man ikke forandre mening. Lenke til kommentar
kilogram Skrevet 11. november 2002 Del Skrevet 11. november 2002 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
Øsse Skrevet 12. november 2002 Forfatter Del Skrevet 12. november 2002 Det stemmer at det er et felt som heter Enable (ikke disable). Dette setter jeg som "False" etter å ha klikket på knappen. Takk for svarene. Satser på å prøve tips 2 senere. Er ikke kommet så langt enda. :wink: Lenke til kommentar
Format71 Skrevet 2. desember 2002 Del Skrevet 2. desember 2002 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå