Wenn das Item bereits in der Listbox vorhanden ist soll eine Fehlermeldung erscheinen.

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Wenn das Item bereits in der Listbox vorhanden ist soll eine Fehlermeldung erscheinen.

    Hey!

    Ich denke der Code erklärt sich von alleine:

    VB.NET-Quellcode

    1. If Form1.ListBox1.Items = TextBox1.Text Then
    2. MsgBox("Fehler! Dieser Benutzername existiert bereits in Ihrer Kontaktliste!", MsgBoxStyle.Critical, "Fehler")
    3. Else
    4. Form1.ListBox1.Items.Add(TextBox1.Text)
    5. Me.Hide()
    6. End If


    Aber es will nicht funktionieren! Wisst ihr wie ich das machen kann?
    Hey,

    die ListBox sollte die Daten lediglich anzeigen, nicht als Datenspeicher dienen. Speichere Deine Daten in einer

    VB.NET-Quellcode

    1. List (Of String)


    Besser nocht in einer

    VB.NET-Quellcode

    1. List (Of Kontakte)


    oder einem DataSet. Dein Code ist nicht zielführend.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Artentus schrieb:

    Schalte Option Strict On, dann siehst du von ganz alleine, wo dein Fehler liegt.

    Nöp:
    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "=" mit diesen Argumenten aufgerufen werden kann:
    "Public Shared Operator =(a As String, b As String) As Boolean": Der Wert vom Typ "System.Windows.Forms.ListBox.ObjectCollection" kann nicht in "String" konvertiert werden.
    Richtig, oder wenn du unbedingt bei der ListBox bleiben willst:

    Mach es so:

    VB.NET-Quellcode

    1. For Each item As String In ListBox1.Items
    2. If item.Contains(TextBox1.Text) Then
    3. MsgBox("Item bereits vorhanden")
    4. End If
    5. Next

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

    programmer71 schrieb:

    Richtig, oder wenn du unbedingt bei der ListBox bleiben willst:

    Mach es so:

    VB.NET-Quellcode

    1. For Each item As String In ListBox1.Items
    2. If item.Contains(TextBix1.Text) Then
    3. MsgBox("Item bereits vorhanden")
    4. End If
    5. Next

    Jetzt passiert gar nichts mit dem Button?!

    //EDIT: Jetzt geht es, danke :)

    //EDIT: Geht doch nich, es kommt zwar eine Fehlermeldung aber es fügt sich trotzdem hinzu:

    VB.NET-Quellcode

    1. For Each item As String In Form1.ListBox1.Items
    2. If item.Contains(TextBox1.Text) Then
    3. MsgBox("Dieser Benutzername existiert bereits in deiner Kontaktliste.", MsgBoxStyle.Critical, "Fehler")
    4. End If
    5. Next
    6. Form1.ListBox1.Items.Add(TextBox1.Text)
    7. Me.Hide()

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

    Hi
    nutze doch die DataSource-Eigenschaft der ListBox. Anschließend überprüfe per Contains, ob das Element enthalten ist. Das ginge zwar auch ohne DataSource, aber da gewöhnst du dir die Verwendung der ListBox gleich richtig an.

    Bitte zitiere übrigens nicht jedes mal deinen Vorredner.

    Gruß
    ~blaze~
    Wieso Nöp? Genau das ist dein Fehler, du versuchst zwei inkompatible Typen miteinander zu vergleichen. Items ist einer Auflistung, während Text ein String ist. Um festzustellen, ob ein bestimmtes Element in ein Auflistung existiert, kannst du die Methode Contains verwenden.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _listContacts As New System.ComponentModel.BindingList(Of Contact)
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. ListBox1.DataSource = _listContacts
    5. _listContacts.Add(New Contact With {.UserName = "SpaceyX"})
    6. _listContacts.Add(New Contact With {.UserName = "XYZ"})
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Dim userName As String = TextBox1.Text
    10. If _listContacts.Where(Function(c) c.UserName.ToLower() = userName.ToLower()).Count = 1 Then
    11. MessageBox.Show("Dieser Nutzer existiert bereits")
    12. Else
    13. _listContacts.Add(New Contact With {.UserName = userName})
    14. End If
    15. End Sub
    16. End Class
    17. Public Class Contact
    18. Public Property UserName As String
    19. Public Overrides Function ToString() As String
    20. Return Me.UserName
    21. End Function
    22. End Class


    So in der Art.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Listbox-Fehlermeldung

    Es kommt zwar die definierte Fehlermeldung aber es fügt sich trotzdem hinzu, wo liegt der Fehler?
    Da ich das Thema eben zu schnell als "Erledigt" makiert habe, frage ich noch mal.








    For Each item As String In Form1.ListBox1.Items
    If item.Contains(TextBox1.Text) Then
    MsgBox("Dieser Benutzername existiert bereits in deiner Kontaktliste.", MsgBoxStyle.Critical, "Fehler")
    End If
    Next
    Form1.ListBox1.Items.Add(TextBox1.Text)
    Me.Hide()

    *Topics zusammengeführt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Statt _listContacts.Where(Function(c) c.UserName.ToLower() = userName.ToLower()).Count = 1 nimm besser Any, das bricht ab, sobald eins gefunden wurde. Außerdem wäre statt einem ToLower-Vergleich immernoch String.Equals mit einem StringComparison passender und bei Contact halt den DisplayMember auf den Namen der Property (UserName).

    Außerdem ist das hässlich so, @timivido. Wenn etwas nicht klar ist, frag' nach, warum etwas anders zu machen ist und wie es geht, statt es einfach zu ignorieren.

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    timivido schrieb:

    VB.NET-Quellcode

    1. Form1.ListBox1.Items
    Ist Form1 der Name der Form oder eine mit New erstellte Instanz?
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    timivido schrieb:

    angeben oder nicht?
    Du musst auf eine mit New erstellte Instanz zugreifen, egal, welche Form das ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!