index out of Range exception
lima-city → Forum → Programmiersprachen → Basic
array
browser
code
compiler
division
domain
eigene basteln
fehler
http
index
laufzeit
rang
sender
setting
sicherung
stelle
string
system
url
vermutung
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 ... -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage