Avatar billede Slettet bruger
11. november 2003 - 22:17 Der er 2 kommentarer og
2 løsninger

opret element i array - udfør handling - slet element i array

Hej X-perter!

Lidt hjælp til at jonglere med arrays i VB! 

Jeg har et mikrofon-anlæg koblet til COM1

Når en mikrofon aktiveres – skal den ”stille sig i kø”, hvis der er andre mikrofoner aktive (der kan kun være én mikrofon aktiv ad gangen)

Jeg forestiller mig denne kø lagret i et array

Dataene fra COM1 ser således ud
For eksempel ”R001A1” ” R002A2” ” R003A3” ... ”R064A9”

Hvor kø-listen er pladserne A1 til A9 - der kan maksimalt stå 9 mikrofoner i kø ad gangen

De data jeg får fra COM1 skal én efter én fyldes ind i et array.
Allerede ”brugte” pladser må ikke overskrives, nye data skal sættes ind på første ledige plads.

Brugeren af programmet bestemmer hvornår en mikrofon skal gøres aktiv (ved tryk på en knap, markerer en checkbox eller lign.)

Dette skal selvfølgelig være den mikrofon som står forrest i køen (plads A1).

Efter aktivering af mikrofonen skal denne naturligvis slettes fra kø-listen (arrayet)

For at opsummere:

1)    Hvordan fylder jeg elementer i et array uden at overskrive allerede ”brugte” pladser?
2)    Hvordan fjerner jeg et element fra et array igen og bevarer de øvrige?
Avatar billede jepsensen Nybegynder
11. november 2003 - 22:49 #1
Prøv det her.

Lav en form med to knapper (Command1 og Command2), og et tekstfelt (Text1).

Sæt nu følgende kode ind.

Private Queue(8) As String

'Arktiver den næste telefon i køen.
Private Sub Command1_Click()
    Dim I As Integer
   
    'Hvis der er en mikrofon i køen.
    If Queue(0) <> "" Then
        'Skriv noget kode til at aktivere den her.
        MsgBox Queue(0)
    End If
   
    'Flyt alle andre mikrofoner en plads frem
    For I = 0 To 7
        Queue(I) = Queue(I + 1)
    Next I
   
    'Frigør den bagerste plads i køen.
    Queue(8) = ""
End Sub

'Tilføj en mikrofon til køen.
Private Sub Command2_Click()
    Dim I As Integer
   
    'Gennemløb køen
    For I = 0 To 8
        'Hvis den aktuelle plads er tom så
        If Queue(I) = "" Then
            'Tilføj mikrofonen
            Queue(I) = Text1.Text
        End If
    Next I
End Sub

Når du trykker på Command2 bliver der tilføjet en tekst til køen.
Når du trykker på Command1 tager du den første tekst i køen og rykker alle andre frem.

Håber det kan bruges.
Avatar billede Slettet bruger
11. november 2003 - 23:55 #2
//jepsensen

Har først lige set dit forslag nu her...
Afprøvet det i morgen, og så hører du nærmere fra mig! :-) ;-)
Avatar billede martin_moth Mester
12. november 2003 - 08:24 #3
Generelt:

Du kan definerer STATISKE arrays og DYNEMAISK arrays, f.eks.

Dim StatiskArray(9) As String 'Indeholder 10 pladser, 0-9)
Dim DynamsikArray() As String 'Indeholder ?? pladser, 0-??)

I et statisk fylder du bare på, fx. StatiskArray(4) = "Plads nummer 5 index 4"

I et dynamisk skal du redimensionerer det før du kan fylde i det:

ReDim DynamiskArray(9) 'Nu er StatiskArray og DynamsikArray identiske

Når du bruger redim på et dynamsik array sletter du ALT hvad de indeholder, MED MINDRE du bruger Preserve:

Redim Preserve DynamiskArray(20)

Dynamiske arrays:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbcondynamicarrays.asp

Statiske arrays:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconarrays.asp


To gode funktioner:

Lbound(Sttaynavn) og UBound(Arraynavn), der returnerer hhv. nedre og øvre index i et vilkårligt array - at array har altså altid:
AntalPladser= Ubound(Arraynavn) -LBound(Arraynavn)
Avatar billede Slettet bruger
12. november 2003 - 22:43 #4
-> jepsensen

Tak for kode-eksemplet! Jeg har ikke direkte brugt din kode i mit "projekt" men fik god inspiration fra din tankegang
Point er på vej :-)

-> martin_moth

Jeg havde i forvejen læst om både statiske og dynamiske arrays i MSDN (på de CD'er som medfølger VB)
Jeg synes nu alligevel ikke du skal snydes for lidt point :-)
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