18. november 2003 - 14:24Der er
14 kommentarer og 1 løsning
Check af checkbox tilstand
Jeg er ved at lave en applikation, der styrer parallelporten. Til det har jeg lavet en lille "matrix" af checkboxes. De er navngivet i "bytes" med navne som LEDA7, LEDB7, LEDC7, osv.. Applikationen skal først aflæse LEDA7-H7, og derefter gå til LEDA6-H6, osv.
Hver gruppe repræsenterer en byte. Hvordan mener I, det er smartest at kode sig ud af springet fra den ene byte til den næste? Det smarteste vil vel være, antager jeg, en form of if-then-sætning der sikrer, at uanset hvor mange bytes, der skal læses, skal jeg ikke hen og liste checkboxenes navne op i koden. Den læser på checkbox'ene så længe der er nogen. Således kan jeg bare tilføje flere bytes og bibeholde navnesystemet.
Gav det mening? Jeg forklarer gerne nærmere, hvis det er nødvendigt.
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
Måske hjælper det hvis du bare i store vendinger fortæller hvad det er du vil. Vil du loade flere checkboxe runtime, vil do loope over en masse checkboxes eller noget i den stil.
Til at loope over en masse kontroller, så opret dem i et control-array, så kan du fx. sætte 10 vheckboxe til at være "hakket af"
Som jeg forstår det er det en matriks på 8x8, hvor par.porten først sættes med den 1. række, så den 2. osv. Hvis LEDAx er LSB (mindst betyden bit) laver du en løkke: For bit = 0 to 7 if checkbox(bit).value then byteval = byteval + 2^bit endif next byteval indeholder nu en værdi der modsvarer de checkboxe der er sat.
Du har fuldstændig ret mht. matrixen, slumtiger. Det der så måske er lidt uhensigtsmæssigt er, at rækkerne er som nummer 7-0 (læsningen foregår oppefra og ned), og jeg skal have VB til at genkende, eksempelvis, syvtallet i LEDA7, som en operator. Bortset fra det, så vil jeg lige prøve at fuske lidt med det, du har skrevet der. Hvis nogen af jer har foreslag til, hvordan jeg løser det ovenstående problem, må I gerne komme med foreslag. Jeg skal nok hurtigst muligt vende tilbage med feedback, så tråden kan blive afsluttet og pointene delt ud.
Nu er jeg sørme løbet ind en "Component Limit". Hvad pokker er nu det for noget? Er det for meget at forlange, at VB skal kunne lave 1024 checkboxes i en applikation? Come on! Nogen ide om det kan omgås på nogen måde?
Er det sådan at du først læser række et og sætter udgangen, dernæst and'er du med anden række or'er osv. Er jeg ved at nærme mig? Hvad mener du med 7-tallet i LEDA7, jeg troede LEDA7 var en binær værdi?
Det fungerer sådan, at jeg skal styre nogle lysdioder på parallelporten. Derfor har jeg lavet en matrix af checkboxes inddelt i lodrette rækker bestående af 8 checkboxes. Hver række repræsenterer en byte. Og de skal bare læses slavisk i rækkefølge. Programmet skal så ved tryk på en knap læse første række og sætte de ben på datadelen af parallelporten høje, som er "klikket af" i applikationen. Den lader så benene stå høje et par millisekunder, hvorefter applikationen går videre til næste række og sender dens værdi ud på databenene, osv..
Spørgsmålet gik så egentlig på hvordan jeg kunne arrangere rækkerne i en eller anden form for klynger, så jeg ikke skal hen og lave 128 functions.
Desværre løb jeg tør for komponenter, idet der som minimum skal være 1024 (men helst 2048) checkboxes, og det ville VB ikke acceptere, så derfor overvejer jeg at arrangere dem i control arrays bestående af enten 256 stk. 8x8 checkbox-arrays (og det bliver nok ret svært at proppe ind på eet skærmbillede) eller alle checkboxes arrangeret i et stort array.
Nu er problemet med at skelne rækkerne fra hinanden sådan set løst (med en masse if-then-sætninger), så nu har jeg kun et spørgsmål: 1) Hvordan ændrer jeg værdien i en checkbox i et array? Jeg kan ikke lige regne ud, hvordan det fungerer med navne. Med en normal checkbox kan jeg bare gøre følgende ved en _Click()-event: Checkbox1.value=true, men den går jo ikke, når boxene er i et array. Hvordan pinpointer jeg en checkbox i et array?
... Det her er vist ved at blive lidt langhåret... :-P
Private Sub arraytest2_Click() Check64(0).Value = True
End
Jeg får fejl... Hvad pokker kan jeg gøre forkert. Jeg har kontrolleret at navnene er stavet korrekt. Jeg vil bare kunne klikke den checkbox af med et tryk på en knap?
Også skal du kun have et sæt Checkboxes (8 stk.) og en textbox, hvor du kan indtaste kolonnenummer. Når kol.nr. er indtaste splitter du row op i bits og sætter de respektive checkboxes. Hver gang du klikker på en checkbox, beregner du row påny og gemmer værdien i arrayet.
*lol* Selvfølgelig er der chech64(0).Value = 1 og ikke True. Hvad f****** fik mig til at skrive det. Jeg har anvendt =1 over det hele i resten af min kode :-D En lille hjerneblødning vil jeg tro... Problemet er løst nu. Slumtiger pointene er dine, siden du har lagt så meget arbejde i svarene. Tak for hjælpen. Også dig, martin moth...
Mange tak. Hvis du får lyst til at dele flere point ud, så sig endeligt til :o)
Synes godt om
Ny brugerNybegynder
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.