| |
VB.NET - FortgeschritteneThrow Exception aus Function | | | Autor: ewaldvb | Datum: 02.11.11 20:08 |
| Hallo!
Ich habe eine Geerbte Klasse mit einer neuen Function.
Da drinnen möchte ich eine Exception schmeissen, die aber im "aufrufenden" Code einschlägt.
Leider funktioniert das aber genau Nicht so.
Das ganze sieht in etwa so aus:
Public Class MyClass
' erbt Irgendwas
Public Function TestArr(ByVal Arr1() As String, ByVal Arr2() As String) As _
Integer
If Arr1.Length <> Arr2.Length Then
Throw New ArgumentException("Die Anzahl der beiden Arrays ist nicht" & _
"ident")
' Return -1
End If
' Bei Fehler bleibt das Programm leider hier stehen:
If Arr1.Length = Arr2.Length Then
If MsgBox("Jetzt Starten?", MsgBoxStyle.YesNo, "Start") = _
MsgBoxResult.Yes Then
' Tu irgendwas .....
Return Arr1.Length + Arr2.Length - 2 ' Besonders sinnvoll ;)
End If
End If
End Function
End Class
'
' und dann irgendwo in einer Form dieser Aufruf:
'
' .....
' Der folgende Aufruf muss einen Fehler zurückbringen, da die Länge der
' beiden Arrays nicht gleich ist. Das Programm soll genau auf dieser
' Anweisung stehen bleiben.
Dim I As Integer = TestArr(New String() {"A", "B"}, New String() {"1", "2", _
"3"})
' ..... Mit F5 starten.
Das Programm bleibt jetzt zwar stehen, aber IN der Function TestArr(...) und zwar beim 1. Statement nach dem "Throw".
Das möchte ich aber nicht, ich hätte gerne, dass das Programm IN der FORM auf der Zeile mit dem Aufruf der Function TestArr(..) stehenbleibt.
Wer weiss da was?
Oder, was habe ich übersehen?
lg
Ewald | |
Re: Throw Exception aus Function | | | Autor: Preisser | Datum: 02.11.11 20:37 |
| Hallo,
wenn eine nicht abgefangene Exception geworfen wird, zeigt VS standardmäßig die Codeposition des Stackframes an, das am nächsten an der Stelle liegt, an der die Exception geworfen wurde, und von der der Quellcode zur Verfügung steht, und das ist dann eben die Zeile mit "Throw ...". Beim Debuggen gibt es jedoch unten einen Tab "Aufrufliste", wo man den aktuellen Stack sieht (ich weiß allerdings nicht, ob das auch in der Express-Edition geht, müsste aber normalerweise schon):
Da kannst du dann z.B. bis zur ursprünglichen Form zurückgehen (beim Doppelklick auf einen Eintrag wird die Codestelle angezeigt).
Bei abgefangenen Exceptions kann man auch über die StackTrace-Property den Stack ausgeben lassen, wie er beim Werfen der Exception war.
Beitrag wurde zuletzt am 02.11.11 um 20:56:57 editiert. | |
Re: Throw Exception aus Function | | | Autor: ewaldvb | Datum: 03.11.11 08:51 |
| Danke erstmal.
Nur hätte ich eben gerne, dass die Function auch "geschmissen" wird: Der Ablauf sollte dort stehen bleiben, von wo aus die Function aufgerufen wurde.
Also auf der Zeile in der Hauptroutine.
Lg Ewald | |
Re: Throw Exception aus Function | | | Autor: Manfred X | Datum: 03.11.11 09:01 |
| Hallo!
Der Debugger hält das Programm im Code dort an, wo die
Exception geworfen wird. Dort kann man in der Regel
feststellen, wieso es zu der Exception kam.
Lies noch mal, was Preisser gepostet hat.
Weiter im Code-Ablauf (nach dem "Schmeissen") geht es nicht
an der Aufrufstelle, sondern es wird gesucht, wo in der
Aufrufliste ein Try-Catch-Block zu finden ist.
MfG
Manfred
Beitrag wurde zuletzt am 03.11.11 um 09:02:03 editiert. | |
Re: Throw Exception aus Function | | | Autor: ewaldvb | Datum: 03.11.11 16:44 |
| Hallo Manfred!
Genau so stellt es sich ja auch dar.
Danke. | |
Re: Throw Exception aus Function | | | Autor: ewaldvb | Datum: 03.11.11 16:46 |
| Ebenfalls: Danke für Eure Mühen!
lg
Ewald | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|