24. januar 2003 - 23:04Der 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!
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.
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.
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'."
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 :)
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.