Textbox vergleicht item in Listbox

  • VB.NET

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

    Textbox vergleicht item in Listbox

    Hallo Community,
    habe folgendes Problem :

    Habe eine Textbox in der Text eingegeben wird dieser wird in einer Listbox gespeichert und als Liste.Dat ebenalls für backups gespeichert.
    Diese Textbox soll nun sobald der Benutzer ein Wort eingibt und speichern möchte, welches aber schon in der List.Dat und in der Listbox ist gespeichert ist, soll er angezeigt bekommen entweder als MSGBox oder als Infofenster.

    Nur wie bekomme ich das hin ?!
    Hänge da schon seit fast 2 Stunden fest und suche hat ebenfalls nichts ergeben.

    Bin ganz verzweifelt.

    Mit freundlichen Grüßen
    und Dank im Vorraus

    LoremIpsum

    VB.NET-Quellcode

    1. If textbox1.text = Listbox1.SelectedItem Then
    2. MsgBox("Eintrag ist gleich)
    3. Else
    4. 'Keine ahnung was
    5. End if

    VB.NET-Quellcode

    1. if Textbox1.Text.ToString = ListBox1.SelectedItem.ToString Then
    2. MsgBox("Beide Einträge sind Identisch!")
    3. Else
    4. MsgBox("Die Einträge sind nicht Identisch!")
    5. End if


    /e
    Sehe grade, Patrick war schneller..
    Einfach so:

    VB.NET-Quellcode

    1. if Textbox1.Text.ToString = ListBox1.SelectedItem.ToString Then
    2. MsgBox("Beide Einträge sind Identisch!")
    3. Else
    4. ListBox1.Items.Add(Textbox1.Text.ToString)
    5. End if


    Die If Abfrage prüft, ob die Einträge Identisch sind.
    Wenn sie Identisch sind, wird eine MsgBox ausgegeben mit dem oben genannten inhalt.
    Das Else bedeutet soviel wie "wenn nicht"
    Und hinter das Else kommt dann

    VB.NET-Quellcode

    1. ListBox1.Items.Add(Textbox1.Text.ToString)


    Also, wenn die Einträge nicht Identisch sind, wird der Inhalt der Textbox in die Listbox eingetragen..

    //EDIT:
    Die NullReferenceException kommt wahrscheinlich daher, das nichts in der Listbox ausgewählt ist.

    Mach das am besten wie folgt:

    VB.NET-Quellcode

    1. If TextBox1.Text.ToString = ListBox1.SelectedItem.ToString And Not ListBox1.SelectedItem.ToString = "" Then
    2. MsgBox("Beide Einträge sind Identisch!")
    3. Else
    4. ListBox1.Items.Add(Textbox1.Text.ToString)
    5. End if
    Da kommt dann "Der Objektverweis wurde nicht auf eine Instans festgelegt"

    Die Listbox befindet sich zwar in einer anderen Form die ich auch eingegeben habe:

    hier der Code:

    VB.NET-Quellcode

    1. Public Class vokabeladd
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Vokabelliste.ListBox1.Items.Add(TextBox1.Text)
    4. Vokabelliste.ListBox2.Items.Add(TextBox2.Text)
    5. Dim sFile As String
    6. sFile = Application.StartupPath & "\Liste.dat"
    7. Vokabelliste.ListBox_Save(Vokabelliste.ListBox1, sFile)
    8. Vokabelliste.ListBox_Save(Vokabelliste.ListBox2, sFile)
    9. TextBox1.Clear()
    10. TextBox2.Clear()
    11. If TextBox1.Text.ToString = Vokabelliste.ListBox1.SelectedItem.ToString Then
    12. MsgBox("Beide Einträge sind Identisch!")
    13. Else
    14. Vokabelliste.ListBox1.Items.Add(TextBox1.Text.ToString)
    15. End If
    16. End Sub
    17. End Class
    Probier mal das:

    Neoner schrieb:

    Mach das am besten wie folgt:

    VB.NET-Quellcode

    1. If TextBox1.Text.ToString = ListBox1.SelectedItem.ToString And Not ListBox1.SelectedItem.ToString = "" Then
    2. MsgBox("Beide Einträge sind Identisch!")
    3. Else
    4. ListBox1.Items.Add(Textbox1.Text.ToString)
    5. End if
    System.NullReferenceException wurde nicht behandelt.
    Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Source=LoremIpsum
    StackTrace:
    bei Vokabeltrainer_by_M.Klöcker.vokabeladd.Button1_Click(Object sender, EventArgs e) in C:\Users\Marvin\documents\visual studio 2010\Projects\Vokabeltrainer by M.Klöcker\Vokabeltrainer by M.Klöcker\vokabeladd.vb:Zeile 12.
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    bei Vokabeltrainer_by_M.Klöcker.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException:

    Hier ist der Code mit deinen Änderungen:

    VB.NET-Quellcode

    1. Public Class vokabeladd
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Vokabelliste.ListBox1.Items.Add(TextBox1.Text)
    4. Vokabelliste.ListBox2.Items.Add(TextBox2.Text)
    5. If TextBox1.Text.ToString = Vokabelliste.ListBox1.SelectedItem.ToString And Not Vokabelliste.ListBox1.SelectedItem.ToString = "" Then
    6. MsgBox("Beide Einträge sind Identisch!")
    7. Else
    8. Vokabelliste.ListBox1.Items.Add(TextBox1.Text.ToString)
    9. End If
    10. Dim sFile As String
    11. sFile = Application.StartupPath & "\Liste.dat"
    12. Vokabelliste.ListBox_Save(Vokabelliste.ListBox1, sFile)
    13. Vokabelliste.ListBox_Save(Vokabelliste.ListBox2, sFile)
    14. TextBox1.Clear()
    15. TextBox2.Clear()
    16. End Sub
    17. End Class
    sorry grütze was ich schrieb... ich sehe da die exception.... nullreference....
    das heist du hast ein object wo ich vermute... vokabelliste ....

    VB.NET-Quellcode

    1. Public Class vokabeladd
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. try
    4. Vokabelliste.ListBox1.Items.Add(TextBox1.Text)
    5. Vokabelliste.ListBox2.Items.Add(TextBox2.Text)
    6. If TextBox1.Text.ToString = Vokabelliste.ListBox1.SelectedItem.ToString Andalso Vokabelliste.ListBox1.SelectedItem.ToString <> "" Then
    7. MsgBox("Beide Einträge sind Identisch!")
    8. Else
    9. Vokabelliste.ListBox1.Items.Add(TextBox1.Text.ToString) -> ' schwachsinn... denn textbox1.text ist ein String....
    10. End If
    11. Dim sFile As String = "" -> macht man so, denn ist er leer und hast keine exception ....
    12. ' 12: -> sFile = Application.StartupPath & "\Liste.dat"
    13. Vokabelliste.ListBox_Save(Vokabelliste.ListBox1, sFile)
    14. Vokabelliste.ListBox_Save(Vokabelliste.ListBox2, sFile)
    15. TextBox1.Clear()
    16. TextBox2.Clear()
    17. [color=#ff0000]catch ex as exception
    18. msgbox("Exception: & ex.message)
    19. end try[/color]
    20. End Sub
    21. End Class


    als was wurde "Vokabelliste" Dimensioniert.... ????

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrTweek“ ()

    Hat nicht geklappt !

    Hier die Fehler:

    Fehler 1 "Try" muss mindestens ein "Catch" oder ein "Finally" haben. C:\Users\Marvin\documents\visual studio 2010\Projects\Vokabeltrainer by M.Klöcker\Vokabeltrainer by M.Klöcker\vokabeladd.vb 4 9 LoremIpsum


    Fehler 2 Dem Bezeichner fehlt die schließende Klammer "]". C:\Users\Marvin\documents\visual studio 2010\Projects\Vokabeltrainer by M.Klöcker\Vokabeltrainer by M.Klöcker\vokabeladd.vb 20 1 LoremIpsum

    Fehler 3 Zeichenfolgenkonstanten müssen mit einem doppelten Anführungszeichen enden. C:\Users\Marvin\documents\visual studio 2010\Projects\Vokabeltrainer by M.Klöcker\Vokabeltrainer by M.Klöcker\vokabeladd.vb 21 8 LoremIpsum

    Fehler 4 Bezeichner erwartet. C:\Users\Marvin\documents\visual studio 2010\Projects\Vokabeltrainer by M.Klöcker\Vokabeltrainer by M.Klöcker\vokabeladd.vb 22 9 LoremIpsum



    VB.NET-Quellcode

    1. Public Class vokabeladd
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Try
    4. Vokabelliste.ListBox1.Items.Add(TextBox1.Text)
    5. Vokabelliste.ListBox2.Items.Add(TextBox2.Text)
    6. If TextBox1.Text.ToString = Vokabelliste.ListBox1.SelectedItem.ToString AndAlso Vokabelliste.ListBox1.SelectedItem.ToString <> "" Then
    7. MsgBox("Beide Einträge sind Identisch!")
    8. Else
    9. Vokabelliste.ListBox1.Items.Add(TextBox1.Text.ToString)
    10. End If
    11. Dim sFile As String = ""
    12. ' 12: -> sFile = Application.StartupPath & "\Liste.dat"
    13. Vokabelliste.ListBox_Save(Vokabelliste.ListBox1, sFile)
    14. Vokabelliste.ListBox_Save(Vokabelliste.ListBox2, sFile)
    15. TextBox1.Clear()
    16. TextBox2.Clear()
    17. [color=#ff0000]catch ex as exception
    18. msgbox("Exception: & ex.message)
    19. end try[/color]
    20. End Sub
    21. End Class

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

    Probier es so:

    VB.NET-Quellcode

    1. Public Class vokabeladd
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Try
    4. Vokabelliste.ListBox1.Items.Add(TextBox1.Text)
    5. Vokabelliste.ListBox2.Items.Add(TextBox2.Text)
    6. If TextBox1.Text.ToString = Vokabelliste.ListBox1.SelectedItem.ToString AndAlso Vokabelliste.ListBox1.SelectedItem.ToString <> "" Then
    7. MsgBox("Beide Einträge sind Identisch!")
    8. Else
    9. Vokabelliste.ListBox1.Items.Add(TextBox1.Text.ToString)
    10. End If
    11. Dim sFile As String = ""
    12. ' 12: -> sFile = Application.StartupPath & "\Liste.dat"
    13. Vokabelliste.ListBox_Save(Vokabelliste.ListBox1, sFile)
    14. Vokabelliste.ListBox_Save(Vokabelliste.ListBox2, sFile)
    15. TextBox1.Clear()
    16. TextBox2.Clear()
    17. Catch ex As Exception
    18. MsgBox("Exception: " & ex.Message)
    19. End Try
    20. End Sub
    21. End Class
    Ach komm schon. Das ist doch nicht so schwer.
    Die Exception tritt auf, weil ListBox1.SelectedItem Nothing ist.

    Also erst mal:

    VB.NET-Quellcode

    1. If ListBox1.SelectedItem Is Nothing OrElse ListBox1.SelectedItem.ToString = TextBox1.Text Then
    2. 'Nicht hinzufügen
    3. MessageBox.Show("Kein Eintrag gewählt oder Eintrag ist gleich")
    4. Else
    5. 'Hinzufügen
    6. ListBox1.Items.Add(TextBox1.Text)
    7. End If


    Typen sollte man schon wissen:
    ListBox1.SelectedItem -> Object, also mit .ToString zu einem String casten.
    TextBox1.Text -> String, erneut zu String casten ist unnötig.

    Zweitens: Laut Aufgabenstellung des TE soll überprüft werden, ob überhaupt schon der Eintrag in der Liste ist.
    Also:

    VB.NET-Quellcode

    1. If ListBox1.Items.Contains(TextBox1.Text) Then
    2. 'Nicht hinzufügen
    3. MessageBox.Show("Der Eintrag existiert bereits")
    4. Else
    5. 'Hinzufügen
    6. ListBox1.Items.Add(TextBox1.Text)
    7. End If
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also Textbox.Text.ToString ist reichlich überflüssig. Der Textbox.Text IST im Stringformat. Ach, wurde schon angesprochen.

    VB.NET-Quellcode

    1. If ListBox1.Items.Count > 0 AndAlso TextBox1.TextLength > 0 Then
    2. For x As Integer = ListBox1.Items.Count - 1 To 0 Step -1
    3. 'For x As Integer = 0 To ListBox1.Items.Count - 1
    4. If ListBox1.Items.Item(x).ToString.Contains(TextBox1.Text) Then
    5. MessageBox.Show(TextBox1.Text & " gefunden in Zeile " & x.ToString)
    6. ListBox1.SelectedIndex = x
    7. Else
    8. Listbox1.items.add(Textbox1.text)
    9. End If
    10. Next
    11. End If

    Sieht umständlich aus, aber hiermit lässt sich auch ermitteln, in welcher Zeile der Listbox der gesuchte Eintrag ist und diese selektieren.


    Allerdings ist Contains nicht wirklich Ideal für eine Überprüfung auf doppelte Einträge. Ein Suchwort 123 würde z.B. auch gefunden, wenn ein Eintrag 1234 enthalten ist, oder 534212347344. Aber ist ja nicht mein Problem.^^

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Unwesen“ () aus folgendem Grund: Expander entfernt; Um Eintrag hinzuzufügen wird Schleife nun rückwärts durchlaufen; Code zusammengefügt.

    Danke für die Hilfe Niko !!!!
    Dein Beitrag hat mich weiter gebracht nun klappt es !!!

    Vielen Dank !

    Mit freundlichen Grüßen
    LoremIpsum

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