kostenloser Webspace werbefrei: lima-city


index out of Range exception

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    System.IndexOutOfRangeException wurde nicht von Benutzercode behandelt.
    Message=Der Index war außerhalb des Arraybereichs.
    Source=Browser
    StackTrace:
    bei Browser.frmBrowser.wb_DocumentCompleted(Object sender, WebBrowserDocumentCompletedEventArgs e) in C:\Users\martin\Documents\Visual Studio 2010\Projects\Internet\Browser\Forms\frmBrowser.vb:Zeile 95.
    InnerException:


    Der dazu gehörige Code:

    If strDomain(1) = wb.Document.Domain Then


    Wer es brauch noch der Rest:
    Private Sub wb_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted
            oDoc = wb.Document
            Dim s As String
            Dim strDomain() As String
            For Each s In My.Settings.BlockedSites
                strDomain = Split(s, "http://")
                If strDomain(1) = wb.Document.Domain Then
                    wb.DocumentText = My.Resources.Blocked
                    AppManager.MainForm.pBar.Visible = False
                    Exit Sub
                End If




    Ich kapier es nicht... Es ist doch alles richtig oder nicht?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hey ;)

    Ich kann Basic nicht, aber den Code kann ich ein wenig nachvollziehen.

    Eine Exception ist ein Runtime Error. D.h. dein Code ist grundsätzlich korrekt, aber zur Laufzeit passiert ein Fehler, den der Compiler nicht vorhersehen kann.
    Die besten Beispiele sind Division by zero,
    // Wenn c z.B. durch einen impliziten cast auf 0 gesetzt wird, sieht man das im Code nicht gleich...
    a = b / c; // wenn c == 0 -> Error / Exception.

    oder eben eine Index out of Range Exception. (Es gibt noch viele mehr, bzw. kann man sich (vermutlich auch in Basic) eigene Basteln.)

    In deinem Fall heißt das einfach, dass es im Array strDomain auf Stelle 1 keinen Eintrag gibt.
    Normalerweise entstehen diese Fehler, wenn du als Index eine Variable stehen hast, die irgendwann zu groß wird.
    In diesem Konkretem Fall gehe ich davon aus, dass etwas beim Input nicht stimmt, denn der Index ist ja immer 1.

    Ich könnte mir vorstellen, dass du eine URL bekommst, in der "https://www..." steht.
    In dem Fall scheitert der Befehl Split(s, "http://"); bzw. gibt dir ein leeres Array zurück, etc.
    Wenn du nun auf die Stelle 1 zugreifst, kracht es. (Ist aber nur meine Vermutung. Habe noch nie mit Basic gearbeitet...)

    Mein Tipp:
    Lass dir in jedem Durchgang deiner For-Each den String ausgeben, und nach dem Split das komplette Array, dass du erhältst. Dann solltest du sehen, woran es liegt.

    Liebe Grüße,
    Sincer
  4. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Der dazu gehörige Code:

    If strDomain(1) = wb.Document.Domain Then

    Ich kann nur mit Delphi vergleichen, und bei Delphi würde strDomain[1] (egal, dass in Delphi die Index-Klammern eckig sind) den ersten Buchstaben des Strings zurückgeben (und strDomain[0] die Lände des Strings). Allerdings hast du ein Problem, wenn der String leer ist, weil dann gibt's den nicht.
    Versuch also vorher mal zu überprüfen, ob der String leer ist, und verarbeite den String nur dann, wenn er nicht leer ist. Möglicherweise ist das der Fehler. Recht viel was anderes kanns mit Index bei einem String ansonsten nicht haben, denk ich mal ...
  5. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Beide Antworten waren teils richtig und hilfreich :)
    Der Array hat einen leeren String ausgegeben, weil die "Startseite" durch ein Missgeschick (Rechtschreibfehler) geblockt wurde... Ich habe diesen natürlich behoben und für die Zukunft auch gleich eine "Sicherung" erstellt...


    If String.IsNullOrEmpty(strDomain(1)) Then     /// Wenn String von StrDomain(1) ist nichts oder leer
                    String.Format(strDomain(1), strDomain(0))  /// Dann formatiere zu null (länge des strings, womit dann bei geblocktem Inhalt auch eine Weiße Seite bzw. der jeweilige error angezeigt wird)


    Nur für Nachfolger nochmal verewigt und kann damit auch geschlossen werden, danke an euch.

    Beitrag zuletzt geändert: 14.11.2011 0:02:16 von kill-a-teddy
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!