Avatar billede Slettet bruger
15. oktober 2003 - 18:45 Der er 32 kommentarer og
1 løsning

fjerne et element i listbox

Hej x-perter..

Håber der er lidt hjælp til en newbie i VB

Jeg forsøger at slette elementer i en listbox med følgende kode:

Private Sub cmdFjern_Click(ListIndex As Integer)
   
    Debug.Print List2.ListIndex
    Debug.Print Len(Mic(List2.ListIndex))
   
    Do Until List2.ListIndex = -1
     
        If List2.Selected(List2.ListIndex) = True Then
            MsgBox "Du har valgt at fjerne mikrofon:  " & Mic(List2.ListIndex)
            Mic(List2.ListIndex) = ""
            List2.ListIndex = -1
            Exit Do
        End If
        If (List2.Selected(List2.ListIndex) = True And Len(Mic(List2.ListIndex)) = 0) Then
            MsgBox "Du har valgt et tomt felt"
            Exit Do
        End If
    Loop
   
    'Opdaterer listen
    List2.Clear
       
    For I = 0 To 9
        List2.AddItem Mic(I)
    Next I
   
End Sub
Avatar billede Slettet bruger
15. oktober 2003 - 18:50 #1
Whoops... den røg afsted for tidligt...

Problemet er at programmet aldrig når ned til if-sætning nr. 2 (ved godt, at man burde kunne bruge else - men jeg har ikke fået det til at køre - forslag til forbedring modtages med kyshånd!)

Hvis jeg vælger et tomt felt i listboxen  - får jeg bare beskeden "Du har valgt at fjerne mikrofon: "

Jeg synes der burde være taget højde for det i if-sætning nr. 2 - men den er ligeglad med om størrelsen af elementet i arrayet er 0.

Er der en som kan fortælle mig, hvad der er galt?
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 18:50 #2
hvad får du af fejlmeddelser? skriv hele fejlen her.
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 18:53 #3
jeg får en fejl ved "Mic"
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 18:54 #4
hvad er mic? en sub eller funktion du ikke har fået med?
Avatar billede Slettet bruger
15. oktober 2003 - 18:54 #5
jeg får ingen fejl - kun beskeden "Du har valgt at fjerne mikrofon: " hvilket indikerer at den stadig befinder sig i den første if.

Jeg kan vh.a. de 2 Debug.Print - kommandoer se, at listindex f.eks. er 1 og at størrelsen på pladsen i arrayet er 0, så den burde køre if-sætning 2
Avatar billede Slettet bruger
15. oktober 2003 - 18:56 #6
// thesurfer
mic er et array...

jeg får følgende fejl hvis jeg fjerne exit do i den første if

Invalid property array index (Error 381)
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 19:01 #7
ok.. for at jeg ikke skal sidde og gætte hvad du har af ting og sager i din kode, bedes du paste ALT den kode der bruges af funktionen der fjerner elementer fra listboxen.. dvs selve funktion, plus evt henvisninger til andet kode..
Avatar billede Slettet bruger
15. oktober 2003 - 19:11 #8
Kode fra Generals-sektionen
Option Explicit
Dim I As Integer
Dim J As Integer
Dim Mic(9) As String 'opretter array til mikrofoner
Dim Antal As Integer

Det der loades på formen når programmet startes.:

Private Sub Form_Load()
   
    Dim MyStr
     
    Mic(0) = "P001M"
    Mic(1) = "P002P"
    Mic(2) = "P003P"
 
    List1.Clear
    List2.Clear
   
    For I = 0 To UBound(Mic())
           
            MyStr = "Mikrofon nr: " & I
            List1.AddItem MyStr
            List2.AddItem Mic(I)
    Next I
   
End Sub

Knappen tilføj:


Private Sub cmdTilfoj_Click()
     
    For I = 0 To UBound(Mic)
        If Len(Mic(I)) = 0 Then Exit For
    Next I
        Mic(I) = Text1.Text
   
    List2.Clear
       
    For I = 0 To 9
        List2.AddItem Mic(I)
    Next I

End Sub

Det var vist det...
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 19:21 #9
du fjerner dem ikke fra list2.. du overskriver dem med "" (tomt mellemrum)..
Avatar billede Slettet bruger
15. oktober 2003 - 19:29 #10
Brug RemoveItem
Avatar billede Slettet bruger
15. oktober 2003 - 21:48 #11
// thesurfer & bertie

Jeg fjerner jo et element fra et array - der kan man ikke bruge RemoveItem
Jeg har så prøvet dette...

Mic(List2.ListIndex) = ""
List2.RemoveItem (List2.ListIndex)

men det gør ingen forskel... nye forslag?
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 21:50 #12
jeg forstår ikke lige hvad du bruger arrayet til..
kan du ikke lige forklare det?
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 21:51 #13
du skal bare fjerne disse linier fra cmdFjern_click sub'en:

    'Opdaterer listen
    List2.Clear
       
    For I = 0 To 9
        List2.AddItem Mic(I)
    Next I
Avatar billede Slettet bruger
15. oktober 2003 - 21:53 #14
//thesurfer

Jeg kan da prøve..
Jeg har et array med x elementer...
Disse elementer bliver listet i listboxen.
Man skal så kunne selecte et element og derefter fjerne det fra både listen og arrayet...
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 21:55 #15
du er klar over at følgende er en sub, og ikke en knap, ik?:

Private Sub cmdFjern_Click(ListIndex As Integer)
Avatar billede Slettet bruger
15. oktober 2003 - 21:58 #16
//thesurfer..

med risiko for at lyde dum - (er helt ny i forhold til VB) hvilken forskel gør det... (har fulgt diverse tutorials hvor "knapper" blev oprettet på denne måde??)
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 22:01 #17
det virker lidt dumt/fjollet at kalde en sub eller en funktion for "cmd" (forkortelsen for Command, som i CommandButton = knap) "et eller andet" og derefter "_click" (som bruges når noget klikkes på)..
Avatar billede Slettet bruger
15. oktober 2003 - 22:05 #18
Du svarer ikke på hvad forskellen er?
Man kan måske ikke først vælge noget i en listbox? Og derefter klikke en knap for at få udført det valg som brugeren foretager?
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 22:09 #19
det med navnet: når du engang laver et større program, vil du helst ikke sidde og undre dig over hvordan den knap er henne.. plus, så er det nemmere for andre at hjælpe dig med koden..

til listboxen: jeg kan ikke se hvad det er den skal gøre med list1.. den bliver populated (udfyldt) med "Mikrofon nr. " 0 til 9.. og så sker der ikke mere..?
Avatar billede Slettet bruger
15. oktober 2003 - 22:17 #20
den kode du ser til list1 køres når programmet starter (Private Sub Form_Load)

Dette gøres for at vise bruger - hvor mange mikrofoner der p.t. er i arrayet...

Bruger kan vælge at tilføje/fjerne mikrofoner til/fra arrayet..
Avatar billede thesurfer Nybegynder
15. oktober 2003 - 22:23 #21
hvorfor har du BÅDE en array OG en listbox ?
Avatar billede Slettet bruger
15. oktober 2003 - 22:24 #22
steyr>> Mit svar var baseret på din overskrift i spørgsmålet:
fjerne et element i listbox
Avatar billede Slettet bruger
15. oktober 2003 - 22:28 #23
jeg er ved at lave et brugerinterface til et konferenceanlæg (et anlæg som styrer mikrofoner on/off)
Når en mikrofon aktiveres sender konferenceanlægget en kode til pc'en via RS232.
Denne kode skal sammenlignes med de mikrofoner der ligger i mit array.

Matcher kode i array og kode fra RS232 sammen skal mikrofon aktiveres.

Se evt. beskrivelse her http://home1.stofanet.dk/vkhomepage/Projekt.htm
Avatar billede martin_moth Mester
16. oktober 2003 - 07:23 #24
Dit allerførste eksempel - den kode der er i dit oprindelige spørgsmål. Du looper jo ikke over noget som helst - listindex ændrer sig slet ikke!!! Så din loop-løkke er forkert - du har glemt at ændrer på listindex undervejs i dit loop.

Derudover bør du Dim'me dit array...
Fx Dim Mic(9) as String hvis der skal være plads til 10 strings...
Avatar billede martin_moth Mester
16. oktober 2003 - 07:26 #25
Derudover ville jeg omskrive fra
If (List2.Selected(List2.ListIndex) = True And Len(Mic(List2.ListIndex)) = 0) Then
til
If (List2.Selected(List2.ListIndex) = True) And (Len(Mic(List2.ListIndex)) = 0) Then ' ved ikek om de paranteser er nødvendige, men dine paranteser set forkerte ud, synes jeg. Bare et gæt
Avatar billede martin_moth Mester
16. oktober 2003 - 07:39 #26
VRØVL - det er for tidligt om morgenen. Glem hvad jeg sagde om loop, men husk at Dim'me dit array...

Prøv at ret til følgende, og fortæl om der stadig er fejl, og hvis ja, hvad er så fejlen? Bemærk, at dit Loop er fjernet

  If List2.Selected(List2.ListIndex) = True Then
    If Len(Mic(List2.ListIndex)) = 0 Then
      MsgBox "Du har valgt et tomt felt"
    Else
      MsgBox "Du har valgt at fjerne mikrofon:  " & Mic(List2.ListIndex)
      Mic(List2.ListIndex) = ""
      List2.Clear
      For I = 0 To 9
        List2.AddItem Mic(I)
      Next I
    End If
  Else
    MsgBox "Du har slet ikke valgt noget - klovn"
  End If
Avatar billede Slettet bruger
16. oktober 2003 - 10:05 #27
// martin moth

pyha - jeg har faktisk ventet på, at du skulle smide en kommentar til min kode (ser ud til på x-perten, at du har godt styr på VB :-) :-) )

Har pastet din kode ind i mit projekt, og det kører næsten optimalt...
Dog får jeg denne fejl, hvis jeg ikke har valgt noget i listboxen

Invalid property array index (Error 381)

Det forstår jeg ikke helt, da det ser ud til, at du har taget højde for det i din kode (Else -> MsgBox "Du har slet ikke valgt noget - klovn")

Har du en mail jeg evt. må kontakte dig på?
Avatar billede martin_moth Mester
16. oktober 2003 - 10:18 #28
Nu skriver du ikke hvor fejlen opstår, og jeg har ikke VB her - ovenstående kode er skrevet ud fra "hukommelsen". Men fejlbeskedden er jo, at du bruger et ulovligt index i dit array. Husk, at dit array går fra 0-9, og din listindex fra 1-10. Derfor skal du nok bruge Mic(List2.Listindex - 1)

PS: der er mange der er 100 gange bedre til VB end jeg, fx. sjh, terry og andre... Så det skal du ikke lade dig imponere af...
Avatar billede Slettet bruger
16. oktober 2003 - 10:35 #29
Det ser ikke ud til at løse problemet..

Når jeg kører programmet får jeg den førnævnte fejl:

Invalid property array index (Error 381)

Hvis jeg vælger at debugge bliver første linje i koden valgt

If List2.Selected(List2.ListIndex) = True Then
Avatar billede Slettet bruger
16. oktober 2003 - 10:45 #30
// martin moth

Fik løst problemet med følgende kode sat ind i starten af koden

    If List2.ListIndex = -1 Then
        MsgBox "Du har slet ikke valgt noget - klovn"
        Exit Sub
    End If
Avatar billede martin_moth Mester
16. oktober 2003 - 10:46 #31
Er du sikker på du bruger debuggeren rigtigt, og du ikke bare kører step by step, hvorfor den naturligvis stopper ved den første linie (selvom der ikke er fejl).

Når du kører programmet, og fejlmeddelsen kommer, stiller VB sig ved den linie kode der fremkalder fejlen. Hvilken linie er det?
Avatar billede martin_moth Mester
16. oktober 2003 - 10:47 #32
Nå ja :o)
Avatar billede Slettet bruger
16. oktober 2003 - 10:52 #33
Forresten - Tak for hjælpen ;-)
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