Visual Basic Pop3 Client Fehlermeldung

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ndusa.

    Visual Basic Pop3 Client Fehlermeldung

    Mahlzeit,
    ICh probiere hier gerade einen Pop3 Clienten zu programmieren.
    ICh habe nun das Problem, dass wenn ich auf den Button vom ToolStrip Drücke die Mails einmalig geladen werden drücke ich aber ein Zweites mal darauf werden exakt die gleichen mails noch mal geladen und angezeigt (alles Doppelt).
    Klicke ich nun auf die nachrichten die dazugekommen sich bekomme ich immer den fehler

    "Ein Ausnahmefehler des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein."


    Ich möchte, dass er garnicht erst die Nachrichten mir doppelt anzeigt...

    Hat da jemand eine Idee wo der fehler ist, oder was ich vergessen habe ??? ?(

    Der Code :

    VB.NET-Quellcode

    1. Private Sub ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem1.Click
    2. los_EmailListe.Clear()
    3. Dim iAnzahlEmails As Integer = 1
    4. Dim pop As New Pop3Client
    5. pop.Connect("pop.gmail.com", "995", True)
    6. pop.Authenticate("dieemailadresse", "daspasswort")
    7. iAnzahlEmails = pop.GetMessageCount
    8. For i As Integer = 1 To iAnzahlEmails
    9. los_EmailListe.Add(New Email With {.sBetreff = pop.GetMessage(i).ToMailMessage.Subject, .sText = pop.GetMessage(i).ToMailMessage.Body, .sErhaltenAm = pop.GetMessage(i).Headers.Date})
    10. Next
    11. For Each obj In los_EmailListe
    12. emailanzeige.Items.Add(obj.sBetreff + " " + obj.sAbsender + " " + obj.sErhaltenAm)
    13. Next
    14. End Sub
    15. Private Sub emailanzeige_SelectedValueChanged(sender As Object, e As EventArgs) Handles emailanzeige.SelectedValueChanged
    16. emailausgabefenster.Text = los_EmailListe.Item(emailanzeige.SelectedIndex).sText
    17. End Sub


    Hab mal n screenshot angefügt wo man die doppelten emails erkennt.
    Bilder
    • Unbenannt.PNG

      37,4 kB, 947×575, 285 mal angesehen
    Das Problem ist, dass du zwar deine interne Liste clearst, nicht aber die Listbox selbst. Schöner wäre es allerdings das Ganze über Databinding zu lösen.
    In deinem Fall müsstest du anstatt einer List(of) eine BindingList(Of) erstellen und der Datasource der Listbox zuweisen.
    In deiner Klasse Email müsstest du dann nur die ToString-Methode so in der Art überschreiben:

    VB.NET-Quellcode

    1. Public Overrides Function ToString() As String
    2. Return Me.sBetreff + " " + Me.sAbsender + " " + Me.sErhaltenAm
    3. End Function


    Und in der Funktion emailanzeige_SelectedValueChanged kannst du dann das aktuell selektierte Item in ein E-Mail Objekt casten und auf deren Eigenschaften zugreifen.

    VB.NET-Quellcode

    1. Private Sub emailanzeige_SelectedValueChanged(sender As Object, e As EventArgs) Handles emailanzeige.SelectedValueChanged
    2. Dim item as Email = Directcast(emailanzeige.Selecteditem, Email)
    3. emailausgabefenster.Text = item.sText
    4. End Sub


    Ist ungetestet aber ich denke, dass du es soweit für deine Bedürfnisse anpassen kannst.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten