Avatar billede bashar Nybegynder
18. november 2003 - 14:24 Der 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.
Avatar billede martin_moth Mester
18. november 2003 - 15:17 #1
Jeg forstår det i hvert fald ikke...
Avatar billede bashar Nybegynder
18. november 2003 - 15:27 #2
Hehe. Forklaring følger... Imorgen.
Avatar billede martin_moth Mester
18. november 2003 - 15:38 #3
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"

for i = 1 to 10
  MyCheckBox(i).Value = 1
next i
Avatar billede slumtiger Nybegynder
18. november 2003 - 23:02 #4
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.
Avatar billede bashar Nybegynder
19. november 2003 - 08:32 #5
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.
Avatar billede bashar Nybegynder
19. november 2003 - 11:50 #6
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?
Avatar billede slumtiger Nybegynder
19. november 2003 - 14:39 #7
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?
Avatar billede bashar Nybegynder
19. november 2003 - 15:26 #8
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.

Dioderne er arrangeret således:

LEDA7  LEDA6  LEDA5  ... OSV. ---->
LEDB7  LEDB6  LEDB5
LEDC7  LEDC6  LEDC5
.
.
.
|
|
|
V
OSV.

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
Avatar billede slumtiger Nybegynder
19. november 2003 - 15:36 #9
Checkbox1(0).value=true
Avatar billede bashar Nybegynder
19. november 2003 - 15:43 #10
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?
Avatar billede slumtiger Nybegynder
19. november 2003 - 15:48 #11
Jeg vil foreslå, at lave et array:
Dim LED(2048)

'LED(kol)=row

Row = byteværdi af checkboxes
kol = kolonnenummer

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.
Avatar billede slumtiger Nybegynder
19. november 2003 - 15:55 #12
check64(0).value er ikke en boolean.
Prøv:
check64(0).value = 1
Avatar billede bashar Nybegynder
19. november 2003 - 15:56 #13
Det ser interessant ud. Jeg ser lige på det og vender tilbage i morgen...
Avatar billede bashar Nybegynder
20. november 2003 - 09:34 #14
*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...
Avatar billede slumtiger Nybegynder
20. november 2003 - 09:54 #15
Mange tak. Hvis du får lyst til at dele flere point ud, så sig endeligt til :o)
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