markierter eintrag aus listbox entfernen

  • VB6

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von roger_pautz.

    markierter eintrag aus listbox entfernen

    hallo zusammen, habe ein problem beim programieren. ich soll ein program erstellen, dass mehrere informationen in eine listbox aufnehmen soll. diese infos kann man auch in der listbox markieren. so weit bin ich schon gekommen. jedoch habe ich keine ahnung wie man etwas markiertes aus dieser listbox löschen soll. vielen dank für eure hilfe!

    der code bisher:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Zustand As String
    3. Private Const MAXANZ = 5 'Anzahl der erlaubten Einträge
    4. Private Nummer As Long 'Deklaration eines Feldes mit maxanz Elementen
    5. Private Namen As String
    6. Private Postleitzahl As Long
    7. Private Nummerarray(1 To MAXANZ) As Integer
    8. Private Namenarray(1 To MAXANZ) As String
    9. Private Plzarray(1 To MAXANZ) As Integer
    10. Private Zaehler As Integer
    11. Private Sub CmdHinzu_Click()
    12. If IsNumeric(TxtNummer.Text) = True Then
    13. Namen = TxtName.Text
    14. Nummer = TxtNummer.Text
    15. Postleitzahl = TxtPLZ.Text
    16. LstAusgabe.AddItem TxtNummer.Text & " " & TxtName.Text & " " & TxtPLZ.Text
    17. Nummerarray(Zaehler) = Nummer
    18. Plzarray(Zaehler) = Postleitzahl
    19. Namenarray(Zaehler) = Namen
    20. TxtNummer.Text = ""
    21. TxtPLZ.Text = ""
    22. TxtName.Text = ""
    23. Zaehler = Zaehler + 1
    24. Else
    25. MsgBox "unkorrekte Eingabe"
    26. TxtNummer.Text = ""
    27. TxtPLZ.Text = ""
    28. End If
    29. End Sub
    30. Private Sub CmdLoeschen_Click()
    31. hier fehlt was
    32. End Sub
    33. Private Sub CmdZustand_Click()
    34. If Zustand = "Neueingabe" Then
    35. Zustand = "Bearbeiten"
    36. LblZustand.Caption = Zustand
    37. CmdLoeschen.Enabled = True
    38. CmdAendern.Enabled = True
    39. CmdHinzu.Enabled = False
    40. Else
    41. Zustand = "Neueingabe"
    42. LblZustand.Caption = Zustand
    43. CmdLoeschen.Enabled = False
    44. CmdAendern.Enabled = False
    45. CmdHinzu.Enabled = True
    46. End If
    47. End Sub
    48. Private Sub Form_Load()
    49. Zustand = "Neueingabe"
    50. CmdLoeschen.Enabled = False
    51. CmdAendern.Enabled = False
    52. Zaehler = 1
    53. LstAusgabe.Enabled = True
    54. End Sub
    55. Private Sub LstAusgabe_Click()
    56. Dim pos As Integer
    57. If LstAusgabe.ListIndex = -1 Then
    58. Else
    59. pos = LstAusgabe.ListIndex + 1
    60. TxtNummer.Text = Nummerarray(pos)
    61. TxtName.Text = Namenarray(pos)
    62. TxtPLZ.Text = Plzarray(pos)
    63. End If
    64. End Sub



    Edit by Mad Andy:
    VB-Tag eingefügt!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Hi!

    Visual Basic-Quellcode

    1. List1.RemoveItem List1.ListIndex
    List1.ListIndex ist der Index des angewählten Elementes.
    List1.RemoveItem löscht ein Element aus der Liste. Als Parameter musst du den Index des zu entfernenden Elements übergeben (wenns das ausgewählte ist eben ListIndex)


    so long..
    Andy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Ändern Button

    hallo, danke für deine hilfe, dass wäre jetzt erstmal geschafft. wie siehts denn mit dem ändern button aus? da soll jetzt nur die änderung in die listbox übernommen werden. bestimmt gibts dafür auch so ein kurzen befehl.
    mit der ändeung das geht auch. aber wie gibt er dann wieder das makierte in den textfeldern aus. es wird immer das alte ausgegeben und nicht das geänderte. <--- ok das habe ich jetzt hinbekommen.

    nun ist aber das Problem, wenn ich was lösche aus der listbox und dann wieder ein eintrag makiere zeigt der den eintrag in den textfeldern der gelöscht wurde und nicht den ich makiert habe.
    hat ja jemand ne lösung?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „s-dino“ ()

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Zustand As String
    3. Private Const MAXANZ = 10 'Anzahl der erlaubten Einträge
    4. Private Nrm As Long 'Deklaration eines Feldes mit maxanz Elementen
    5. Private Namen As String
    6. Private Postleitzahl As String
    7. Private Zaehler As Integer
    8. Private Nummerarray(1 To MAXANZ) As Integer
    9. Private Namenarray(1 To MAXANZ) As String
    10. Private Plzarray(1 To MAXANZ) As String
    11. Private pos As Integer
    12. Private Sub cmdaendern_Click()
    13. Dim pos As Integer
    14. pos = lstausgabe.ListIndex + 1
    15. Namen = txtname.Text
    16. Nrm = txtnummer.Text
    17. Postleitzahl = txtplz.Text
    18. lstausgabe.List(lstausgabe.ListIndex) = txtnummer.Text & " " & txtname.Text & " " & txtplz.Text
    19. Nummerarray(pos) = Nrm
    20. Plzarray(pos) = Postleitzahl
    21. Namenarray(pos) = Namen
    22. End Sub
    23. Private Sub CmdHinzu_Click()
    24. Dim pos As Integer
    25. If IsNumeric(txtnummer.Text) = True Then
    26. Namen = txtname.Text
    27. Nrm = txtnummer.Text
    28. Postleitzahl = txtplz.Text
    29. lstausgabe.AddItem txtnummer.Text & " " & txtname.Text & " " & txtplz.Text
    30. Nummerarray(Zaehler) = Nrm
    31. Plzarray(Zaehler) = Postleitzahl
    32. Namenarray(Zaehler) = Namen
    33. txtnummer.Text = ""
    34. txtplz.Text = ""
    35. txtname.Text = ""
    36. Zaehler = Zaehler + 1
    37. Else
    38. MsgBox "unkorrekte Eingabe"
    39. txtnummer.Text = ""
    40. txtplz.Text = ""
    41. End If
    42. End Sub
    43. Private Sub CmdLoeschen_Click()
    44. lstausgabe.RemoveItem (lstausgabe.ListIndex)
    45. End Sub
    46. Private Sub CmdZustand_Click()
    47. If Zustand = "Neueingabe" Then
    48. Zustand = "Bearbeiten"
    49. lblzustand.Caption = Zustand
    50. cmdloeschen.Enabled = True
    51. cmdaendern.Enabled = True
    52. cmdhinzu.Enabled = False
    53. Else
    54. Zustand = "Neueingabe"
    55. lblzustand.Caption = Zustand
    56. cmdloeschen.Enabled = False
    57. cmdaendern.Enabled = False
    58. cmdhinzu.Enabled = True
    59. End If
    60. End Sub
    61. Private Sub Form_Load()
    62. Zustand = "Neueingabe"
    63. cmdloeschen.Enabled = False
    64. cmdaendern.Enabled = False
    65. Zaehler = 1
    66. lstausgabe.Enabled = True
    67. End Sub
    68. Private Sub LstAusgabe_Click()
    69. Dim pos As Integer
    70. If lstausgabe.ListIndex = -1 Then
    71. Else
    72. pos = lstausgabe.ListIndex + 1
    73. txtnummer.Text = Nummerarray(pos)
    74. txtname.Text = Namenarray(pos)
    75. txtplz.Text = Plzarray(pos)
    76. End If
    77. End Sub


    das ist der gesamte text. Ich schaffe es einfach nicht, dass er den array(pos) wieder runterzählt und somit dann den richtigen eintrag anzeigt. man ich bin echt am verzweifeln. habe alles probiert in allen möglichen arten und weisen es zu schreiben aber ich schaff es einfach nicht. ;(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „s-dino“ ()

    Damit der Code funktioniert, müssen die Indizes der Arrays parallel zu denen der Liste laufen. Also wenn du einen Eintrag inner Listbox löscht, müssten du auch den Eintrag im Array löschen und alle Elemente drunter um eins nach oben rücken. Das dürfte mit einer For-Schleife kein Problem darstellen ;)


    so long..
    Andy
    das mit dem doppeleintrag habe ich so versucht

    Visual Basic-Quellcode

    1. Private Sub CmdHinzu_Click()
    2. Dim nrm As Long
    3. Dim pos As Integer
    4. If IsNumeric(txtnummer.Text) Then
    5. nrm = txtnummer.Text
    6. If Zaehler <= MAXANZ Then
    7. If Not Doppeleintrag(Zahlarray, Zaehler - 1, nrm) Then
    8. Namen = txtname.Text
    9. nrm = txtnummer.Text
    10. Postleitzahl = txtplz.Text
    11. lstausgabe.AddItem txtnummer.Text & " " & txtname.Text & " " & txtplz.Text
    12. Zahlarray(Zaehler) = nrm
    13. Plzarray(Zaehler) = Postleitzahl
    14. Namenarray(Zaehler) = Namen
    15. txtnummer.SetFocus
    16. txtnummer.Text = ""
    17. txtplz.Text = ""
    18. txtname.Text = ""
    19. Zaehler = Zaehler + 1
    20. Else
    21. MsgBox "Eintrag schon vorhanden"
    22. End If
    23. Else
    24. MsgBox "Eingabefeld voll!"
    25. Zustand = "liste bearbeiten"
    26. End If
    27. Else
    28. MsgBox "Bitte eine Zahl eingeben!"
    29. Eingabe.Text = ""
    30. End If
    31. End Sub


    und dazu diese subroutine

    Visual Basic-Quellcode

    1. Private Function Doppeleintrag(Feld() As Single, anz As Integer, Eintrag As Single) As Boolean
    2. 'Funktion untersucht ein Array, ob Eintrag schon vorhanden
    3. Dim i As Integer
    4. Dim doppelt As Boolean
    5. doppelt = False
    6. i = 1
    7. Do While i <= anz And Not doppelt
    8. doppelt = Feld(i) = Eintrag
    9. i = i + 1
    10. Loop
    11. Doppeleintrag = doppelt
    12. End Function


    aber jetzt kommt immer die fehlermeldung: unverträglichen typ: array oder benutzerdefinierter typ erwartet. und dann zeigt er auf

    Visual Basic-Quellcode

    1. If Not Doppeleintrag(Zahlarray, Zaehler - 1, nrm) Then


    bei diesem zahlarray.

    aber warum ?(