Avatar billede bernhof Nybegynder
24. januar 2003 - 23:04 Der er 8 kommentarer og
1 løsning

Control Array

Jeg har et For-Next loop, hvor jeg løber fra LBound til UBound i en control array af CommandButtons:

For I = LBound(cmdTest) to UBound(cmdTest)
    cmdTest(I).Caption = "Knap " & I
Next

Men hvis nu knap nr. 5 ikke eksisterer (hvis jeg har slettet den), så opstår der selvfølgelig en fejl, når jeg prøver at henvise til den med

cmdTest(5)

For at undgå, at denne fejl opstår kunne jeg godt tænke mig at vide, om der er nogen måde hvorpå jeg kan undersøge om et bestemt index i en control array eksisterer ... Altså tjekke om fx cmdTest(5) overhovedet findes!

Er der nogen der kan hjælpe mig?
Avatar billede joern Nybegynder
24. januar 2003 - 23:09 #1
Hej.

Der er jo altid 'On error goto' der giver mulighed for at dit program håndterer fejlen, fremfor at den sendes til 'windows', der jo vil kvittere med at afslutte din applikation.
Men ellers vil jeg lige afprøve en idé, og vender tilbage.

M.v.h.  Jørn
Avatar billede bernhof Nybegynder
24. januar 2003 - 23:12 #2
Ok, tak for det. Pointen med dette spørgsmål er netop at undgå at benytte On Error.
Avatar billede joern Nybegynder
24. januar 2003 - 23:18 #3
Hej igen.

Desværre, det jeg ville afprøve virker ikke.  Her er et eksempel med 'error-handling'

Private Sub Command2_Click()
  On Error GoTo knapfejl:
  For a = 0 To 5
        Command1(a).Caption = "Kurt er dum"
  Next a
  Exit Sub
knapfejl:
  x = MsgBox("Knappen med index " & a & "findes ikke", 48, "Medd. fra løkke.")
  Resume Next
End Sub

Hvis en knap ikke findes kommer meddelelsen og derefter øges a med 1 og fortsætter i løkken.

Man kan udelade meddelelsen, men så ser man jo ikke fejlen.

Det 'frækkeste' er øverst at skrive:  'On error resume next'
Det bør man kun i den yderste nød, det er dårlig programmerings-skik.

M.v.h.  Jørn
Avatar billede bernhof Nybegynder
25. januar 2003 - 13:43 #4
Aha.. Jeg har fundet en løsning:

Dim Btn As CommandButton

For Each Btn In cmdTest
    Btn.Caption = "Knap " & Btn.Index
Next

På den måde kan jeg løbe gennem knapperne uden der opstår fejl.
Utroligt at der var ingen der kunne fortælle mig det! :o)
Avatar billede joern Nybegynder
25. januar 2003 - 16:53 #5
Hej.

Det har nok været en stille periode, folk går i byen fredag og sover lørdag formiddag.  Desuden har 'Eksperten' IGEN været nede.  Jeg kunne i hvert fald ikke komme ind trods 5-6 forsøg med mellemrum.

Men mit andet svar gemte jeg i en tekstfil, det er her:

"Nå, dit første svar indløb i mellemtiden.
Så spørger jeg:  Hvorfor skulle en knap mangle?  Hvis du ønsker at den ikke vises, kan du jo gøre den usynlig.  Det vil ikke give fejl at tildele en usynlig kontrol en ny værdi, når bare det ikke er 'Focus'."

M.v.h. Jørn
Avatar billede bernhof Nybegynder
25. januar 2003 - 19:06 #6
Hehe, det har du nok ret i. Men nu var det bare tilfældet, at jeg havde stillet spørgsmålet en gang før (for noget tid siden), hvor jeg heller ikke fik nogle tilfredsstillende svar.

I mit program bliver der hele tiden oprettet nye knapper og "slettet" gamle. Derfor kan det efter længere tid godt løbe op til omkring de 1000 knapper, hvis jeg ikke unloader dem, hvilket jo vil sluge noget hukommelse, og derved gøre programmet noget langsommere. For lige at nævne det, er det ikke knapper, men tekstfelter, checkboxes og optionbuttons, jeg rent faktisk gør brug af, hvilket kan tredoble antallet.

Altså søgte jeg dette svar, for at gøre programmet så hukommelsesvenligt som muligt :)

- Mikkel
Avatar billede joern Nybegynder
25. januar 2003 - 19:18 #7
Det må være et meget specielt program med så dynamiske kontroller, er det noget der bliver præsenteret som demo på en hjemmeside?

M.v.h.  Jørn  www.jkfsoft.dk
Avatar billede bernhof Nybegynder
25. januar 2003 - 19:24 #8
Nej. Det er et program jeg er blevet bedt om at udvikle for en bestemt person.
Avatar billede joern Nybegynder
25. januar 2003 - 23:02 #9
Tak for svaret.  m.v.h.  Jørn
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