VB | Listbox Abarbeiten | Bei fehler eintrag überspringen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    VB | Listbox Abarbeiten | Bei fehler eintrag überspringen

    Hey Leute! Ich hab ein problem wo ich schon längere zeit nicht drauf komme wie ich dies lösen soll :(

    Hier mein Problem:

    Ich habe eine listbox mit z.b: 2500 Einträgen! Mein Programm soll prüfen ob das stimmt, und wenn NICHT soll der eintrag in eine listbox eingetragen werden wo hald alle fehlerhaften einträge aufgelistet werden! Aber Der eintrag soll auch ÜBERSPRUNGEN werden & einfach weitergemacht werden.

    Ist das überhaupt möglich? Habe nach 1-2 std SUFU nix gefunden was mir ansatzweiße helfen könnte :-/

    ~ Bin Anfänger
    Jede Antwort ist sehr Willkommen!

    MFG
    erster wesentlicher Hinweis: trenne Daten und Gui (Steuerelemente).
    Also suche nicht in der Listbox, sondern suche in den Einträgen. Diese rufe nicht von der Listbox ab, sonder von daher, wo sie herkommen - was ich ja nicht weiß.

    Also woher kommen die Einträge - kannst du zeigen, wie du die Listbox befüllst?
    Bitte sieh zu, deinen Code leserlich einzustellen - Bitte VB-Tag benutzen - aber richtig
    Die daten werden derzeit noch von hand gefüllt das mache ich dann später mit einem system was ich später erst alles mache, dennoch hab ich das problem immernoch:

    Ich habs so gemacht: Ich hab jz z.B.:

    Kartoffelen ( Nein hier sind nicht die Deutschen Kartoffel gemeint )
    Kekse
    Kuchen
    Festplatte
    Eier
    Milch

    Festplatte wäre z.b.: hier ja kein lebensmittel also ist das falsch und soll in eine Liste eingetragen werden! Dann soll das Programm die bearbeitung einfach überspringen und zum nächsten ( eier ) fortfahren !

    Was will ich jetzt?

    Wo die daten herkommen und wie diese verarbeiten ist egal ich will einfach in so ner schleife machen! Z.b: wie in einem Skype broadcast tool! Da gibts ja auch das problem mit dem Facebook-verknüpfungen und das das kein username ist und einen fehler wirft!
    DIESER Fehler soll ignoriert werden und einfach weitergemacht werden!

    ~ MFG

    PS: @ErfinderDesRades
    danke für den hinweis schau ich mir gleich an ich geh zuerst noch was essen :3

    diedmaster schrieb:

    Wo die daten herkommen und wie diese verarbeiten ist egal
    Das ist eben dein Denkfehler.
    Du scheinst nur Listbox denken zu können, Daten nicht. Nun heisst es aber "Datenverarbeitung", nicht "ListboxVerarbeitung", und weil ich mir das schon dachte, bat ich um den Code, mit dem die Daten in die Listbox kommen - weil da müssen für einen Moment ja die Daten gewissermaßen "aufblitzen".
    Und da kann man dann den Schwerpunkt richtig legen, dass du verstehst, was ich mit "Daten und Gui getrennt denken" überhaupt meine.
    Hmm Okay..

    VB.NET-Quellcode

    1. Imports SKYPE4COMLib
    2. Public Class Form1
    3. Dim skype As New SKYPE4COMLib.Skype
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. For Each user As SKYPE4COMLib.User In ComboBox1.Items
    6. skype.SendMessage(user.Handle, TextBox1.Text)
    7. Next
    8. End Sub
    9. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. For Each user As SKYPE4COMLib.User In skype.Friends
    11. ComboBox1.Items.Add(user.Handle)
    12. Next
    13. End Sub
    14. End Class


    Bei der auflistung kommen auch fehler wegen der Facebook-verknüpfung & wegen frisch neu erstellen Skype konten.. weil bei facebook is des glaub ich xam@00001034124134@iwat.ka und bei neuen skype konten ist des mit live:DasIstEinUsername

    Und das funktioniert eben nicht

    EDIT: Bei Microsoft neu erstellten konten ist dies: Live:diedmaster ( ist mein orginaler gewesen )
    Bei facebook ist des: xmpp:-XXXXXXXXXXXXXXX@chat.facebook.com
    @diedmaster
    Pseudocode:

    VB.NET-Quellcode

    1. For Each entry in MyList
    2. If IsValid(entry) Then
    3. MainControl.Add(entry)
    4. Else
    5. ErrorControl.Add(entry)
    6. End If
    7. Next

    Die Funktion IsValid() sollte den Eintrag wie auch immer überprüfen und ein Boolean zurückgeben.
    Die beiden Controls zeigen die guten bzw. die schlechten Daten an.
    [OT]
    Übrigens gibt es auf einem normalen Markt in Peru mehr Sorten Kartoffeln als in Europa überhaupt angebaut werden. :D
    [/OT]
    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!
    Aha.
    Also die Daten haben den Datentyp SKYPE4COMLib.User, und kommen aus der Auflistung skype.Friends

    sollte doch kein Problem sein, eine Auswahl-Liste herzustellen

    VB.NET-Quellcode

    1. dim validUsers As new List(Of SKYPE4COMLib.User)
    2. For each usr as SKYPE4COMLib.User in skype.Friends
    3. if [... Testbedingung für valide User .... ] Then
    4. validUsers.Add(usr)
    5. end if
    6. next
    7. 'Zur Anzeige inne Listbox:
    8. Listbox1.DataSource = validUsers
    Du siehst: Die Datenverarbeitung findet mit Daten statt, weder mit List- noch Combo-Boxen.
    Am Schluss die Anzeige der Daten könnte auch weggelassen werden (falls man was anneres vorhat mit diesen Daten).
    @RodFromGermany

    Danke für deine Antwort aber überprüfen naja is gut...
    Ich bleib mal bei meinem SkypeTool beispiel: WÄHREND der ausführung wird erst der fehler geworfen! das Problem dadurch ist das das Programm einfach abkakt und nunja ich glaub nicht das ich mit IsValid des iwie überbrücken kann aber ich versuchs mal ^^


    [OT]
    okayer machs ich hald hier so mit OffTopic :D

    Mehr Kartoffeln also in Euro angebaut werden?
    Ey ich weiß was ich im sommer mach..

    [/OT]

    diedmaster schrieb:

    WÄHREND der ausführung wird erst der fehler geworfen!
    Benenne die Funktion IsValid() in meinem Code um in FühreAus().
    [OT]
    mehr Sorten Kartoffeln
    [/OT]
    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!
    @RodFromGermanynullnullDie funktion is mir klar das des so ned in VB gibt sonst könnte ich das ja nicht starten.. mein problem is das :


    VB.NET-Quellcode

    1. ************* Ausnahmetext **************
    2. System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    3. bei skypetool.Form1.Form1_Load(Object sender, EventArgs e) in C:\Users\diedmaster\documents\visual studio 2010\Projects\zOs_SkypeTool\zOs_SkypeTool\Form1.vb:Zeile 20.
    4. bei System.EventHandler.Invoke(Object sender, EventArgs e)
    5. bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    6. bei System.Windows.Forms.Form.OnCreateControl()
    7. bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    8. bei System.Windows.Forms.Control.CreateControl()
    9. bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    10. bei System.Windows.Forms.Control.WndProc(Message& m)
    11. bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    12. bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
    13. bei System.Windows.Forms.Form.WmShowWindow(Message& m)
    14. bei System.Windows.Forms.Form.WndProc(Message& m)
    15. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    16. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    17. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    Edit:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports SKYPE4COMLib
    2. Public Class Form1
    3. Dim skype As New SKYPE4COMLib.Skype
    4. Dim ls As List(Of String) '= New List(Of SKYPE4COMLib.User)
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. For Each user As SKYPE4COMLib.User In ls
    7. skype.SendMessage(user.Handle, TextBox1.Text)
    8. Next
    9. End Sub
    10. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. For Each user As SKYPE4COMLib.User In skype.Friends
    12. ComboBox1.Items.Add(user.Handle)
    13. ls.Add(user.Handle)
    14. Next
    15. End Sub
    16. End Class

    diedmaster schrieb:

    VB.NET-Quellcode

    1. Dim ls As List(Of String) '= New List(Of SKYPE4COMLib.User)
    Ist ggf. nicht instanziiert.
    Setz einen Haltepunkt auf die Zeile und klär auf, was da nicht instanziiert 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!

    diedmaster schrieb:

    wie funktioniert sowas?
    Tut mir Leid, ich kenen diese DLL nicht.
    Was bietet sie denn für Datenstrukturen / -klassen?
    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!

    diedmaster schrieb:

    Haltepunkt
    Klick auf die Zeile und drück auf F9.
    Sieh Dir das Menü Debuggen zur Edit- und zur Laufzeit an.
    Gugst Du hier.
    Bilder
    • Debuggen1.png

      26,77 kB, 361×414, 107 mal angesehen
    • Debuggen2.png

      34,73 kB, 361×591, 103 mal angesehen
    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!