Löschen von Email in ListBox-Index 0 geht nicht

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

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von Snaptu.

    Löschen von Email in ListBox-Index 0 geht nicht

    Hallo.

    Ich bekomme einen Fehler wenn ich eine E-Mail in einer ListBox löschen möchte, die den Indexwert 0 hat.
    (Also das Oberste Item in der ListBox)

    Das löschen von Emails in der ListBox mit dem Index 0 funktioniert nicht.
    Alle anderen Mails die über dem ersten Eintrag (Index 0) liegen werden problemlos gelöscht. (1, 2, 3 usw)

    Fehlermeldung: [ The messageNumber argument cannot have a value of zero or less. Valid messageNumber is in the range [1, messageCount] ]

    Hier der Code:

    VB.NET-Quellcode

    1. Try
    2. Using pop As New Pop3Client()
    3. pop.Connect("pop.gmx.net", "995", True)
    4. pop.Authenticate(SetEmailAdresse.Text, SetEmailPasswort.Text)
    5. pop.DeleteMessage(EmfpangeneEmailsListe.SelectedIndex)
    6. BetreffPreview.Text = ""
    7. AbsenderPreview.Text = ""
    8. ErhaltenAmPreview.Text = ""
    9. End Using
    10. Button53.PerformClick()
    11. Catch ex As Exception
    12. MessageBox.Show("Beim löschen der E-Mail ist ein Fehler aufgetreten: " & vbCrLf & ex.Message)
    13. End Try


    Hiermit rufe ich die E-Mails vom Server ab:

    VB.NET-Quellcode

    1. Try
    2. los_EmailListe.Clear()
    3. EmfpangeneEmailsListe.Items.Clear()
    4. BetreffPreview.Clear()
    5. AbsenderPreview.Clear()
    6. ErhaltenAmPreview.Clear()
    7. WebBrowser2.DocumentText = Nothing
    8. Dim iAnzahlEmails As Integer = 0
    9. pop = New Pop3Client
    10. pop.Connect("pop.gmx.net", "995", True)
    11. pop.Authenticate(SetEmailAdresse.Text, SetEmailPasswort.Text)
    12. iAnzahlEmails = pop.GetMessageCount
    13. For i As Integer = 1 To iAnzahlEmails
    14. los_EmailListe.Add(New Email With {.sBetreff = pop.GetMessage(i).ToMailMessage.Subject, .sText = pop.GetMessage(i).ToMailMessage.Body, .sAbsender = pop.GetMessage(i).ToMailMessage.From.ToString, .sErhaltenAm = pop.GetMessage(i).Headers.Date})
    15. Next
    16. For Each obj In los_EmailListe
    17. EmfpangeneEmailsListe.Items.Add("Betreff: " & obj.sBetreff & " | Ansender: " & obj.sAbsender & " | Erhalten am: " & obj.sErhaltenAm)
    18. BetreffPreview.Text = obj.sBetreff
    19. AbsenderPreview.Text = obj.sAbsender
    20. ErhaltenAmPreview.Text = obj.sErhaltenAm
    21. Next
    22. Catch ex As Exception
    23. MessageBox.Show(ex.Message)
    24. End Try

    Jason schrieb:

    The messageNumber argument cannot have a value of zero or less


    Da hätte sogar ein einfacher Online-Übersetzer geholfen.
    Das Messagenummer Argument kann keinen Wert haben der 0 oder kleiner ist.
    Valide Messagenummern sind im Bereich von 1 bis AnzahlDerMessages.

    Du hast also nicht die gewollte gelöscht, sondern gewollter Index -1.
    ListBox.Index -1 wäre wenn nichts selektiert ist, bzw. keine Items drin sind.

    Die Range der Indizien der ListBox fänht bei 0 an(wenn Items drin sind und einer gewählt ist) und bei Items.Count -1 endet sie, bei den Messages ist es also immer 1 höher, der Rest ist Mathematik der einfachsten Art.
    Also, der Fehler tritt in dieser Zeile auf:

    VB.NET-Quellcode

    1. pop.DeleteMessage(EmfpangeneEmailsListe.SelectedIndex)


    Gibt es das Entwickler-Handbuch auch für VB 2012?


    ---


    Murdock schrieb:

    Was gibt dir EmfpangeneEmailsListe.SelectedIndex für einen DatenTyp raus?


    Wenn ich den ersten Eintrag der ListBox markiere, bekomme ich den SelectedIndex-Wert 0 .
    Und wenn ich den zweiten Eintrag markiere, bekommen ich den SelectedIndex-Wert 1 usw.
    Das ist ja schonmal was.

    Wenn jetzt also eine Integer = 0 zurückkommt, wie addierst du nun 1 dazu?.

    VB.NET-Quellcode

    1. Dim x as Integer = 0
    2. MessageBox.Show(x.ToString())
    3. x = x +1
    4. MessageBox.Show(x.ToString())
    5. x += 1
    6. MessageBox.Show(x.ToString())
    Gut in
    pop.DeleteMessage(EmfpangeneEmailsListe.SelectedIndex)
    repäsentiert EmfpangeneEmailsListe.SelectedIndex eine Integer, wie kriesgte jetzt noch einen drauf? Du kannst in den Klammern auch addieren.

    Und nehm dir das Buch vor, wenn du wirklich Programmieren lernen willst wird das nichts mit Copy&Paste.

    Jason schrieb:

    Fehlermeldung: [ The messageNumber argument cannot have a value of zero or less. Valid messageNumber is in the range [1, messageCount] ]


    Jason schrieb:

    Also, der Fehler tritt in dieser Zeile auf:

    VB.NET-Quellcode

    1. pop.DeleteMessage(EmfpangeneEmailsListe.SelectedIndex)
    Ich find, damit ist alles geklärt.
    Wie Murdock schon sagte, wie die Fehlermeldung schon sagte, und wie ich jetzt nochmal sage: Der Wert 0 als Index zum Löschen ist nicht zulässig.
    Das erste Element einer Listbox liegt aber numal am Index 0 - wat nu? 8|

    (vlt. mit 1 addieren?)