System.ArgumentNullException - Ideenlos

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    System.ArgumentNullException - Ideenlos

    Moin Zusammen,

    ich stehe mal wieder vor einem Problem, bei dem ich nicht weiter weis.
    Bei folgendem Code

    VB.NET-Quellcode

    1. ​Private Sub KAngebotsTextTextBox_DoubleClick(sender As Object, e As EventArgs) Handles KAngebotsTextTextBox.DoubleClick
    2. ' TextBoxText ist ein Globale Variable
    3. TextBoxText = rwK.KAngebotsText '<-- in der Variablen TextBoxText steht der korrekt Inhalt
    4. rwK.KAngebotsText = "ABC" ' <-- hier kommt die Fehlermeldung aus der u.a. Routine (Designer)
    5. ' rwK.KAngebotsText = TextBoxText ' <-- hier kommt keine Fehlermeldung
    6. End Sub


    VB.NET-Quellcode

    1. <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
    2. Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")> _
    3. Public Property KAngebotsText() As String
    4. Get
    5. Try
    6. Return CType(Me(Me.tabletbl_Kalkulationen.KAngebotsTextColumn),String)
    7. Catch e As Global.System.InvalidCastException
    8. Throw New Global.System.Data.StrongTypingException("Der Wert für Spalte KAngebotsText in Tabelle tbl_Kalkulationen ist DBNull.", e)
    9. End Try
    10. End Get
    11. Set
    12. Me(Me.tabletbl_Kalkulationen.KAngebotsTextColumn) = value ' < ---- Fehlermeldung System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
    13. End Set
    14. End Property


    Woran liegt der Fehler bzw. nach was muss ich suchen?

    Im Voraus Danke für eure Hilfe.
    Günter
    Gruß Günter
    @GünterD Ich sehe zunächst zwei Möglichkeiten:
    Me.tabletbl_Kalkulationen ist Nothing
    oder
    Me.tabletbl_Kalkulationen.KAngebotsTextColumn ist Nothing
    Kläre das auf und dann sorge dafür, dass die betreffende Instanz bei Deinem Aufruf erstellt ist.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin RodFromGermany,

    danke für deine Rückmeldung.
    Ich habe die "Werte" im Debugger alle einzeln geprüft und sie sind nicht Nothing.
    Dabei ist mir aber etwas anderes aufgefallen.

    Ich habe noch eine Routine, die die Änderungen einer Textbox überwacht

    VB.NET-Quellcode

    1. Private Sub KAngebotsTextTextBox_TextChanged(sender As Object, e As EventArgs) Handles KAngebotsTextTextBox.TextChanged
    2. If rwK IsNot Nothing Then
    3. rwK.KAngebotsText = KAngebotsTextTextBox.Text
    4. End If
    5. End Sub

    ... und die 'beißt' sich mit der Private Sub KAngebotsTextTextBox_DoubleClick, da ich in beiden eine Zuweisung rwK.KAngebotsText habe.

    Ich habe jetzt in

    VB.NET-Quellcode

    1. Private Sub KAngebotsTextTextBox_DoubleClick

    die Zeile rwK.KAngebotsText = "ABC" in KAngebotsTextTextBox.Text ="ABC" geändert .... und alles passt.

    Noch eine gute Zeit.
    Gruß Günter
    Uh, da haste jetzt aber keine Lösung, sondern nur einen Workaround gefunden. Wenn Dir das reicht, ok. Aber das wird Dir früher oder später auf die Füße treten, weil Du die Ursache noch nicht beseitigt hast. Du arbeitest starkvermutlich mit einem tDS. Da stellt sich die Frage: Was ist rwK und warum ist es ohne methodeninterne Deklaration bekannt? Ist das Teil etwa "global" wie TextBoxText? Wozu? Was beinhaltet rwK für eine DataTable-Zeile?

    GünterD schrieb:

    TextBoxText = rwK.KAngebotsText '<-- in der Variablen TextBoxText steht der korrekt Inhalt
    Vor der Zuweisung oder danach?
    In Post#1, Codeblock#2 bei der Fehlermeldung solltest Du, wenn die Meldung kommt, mit der Maus auf alle Komponenten dieser Zeile zeigen (nicht klicken), um rauszufinden, was davon Nothing ist. Irgendwas davon IST Nothing, aus Spaß oder Gängelei würde sich der Debugger sonst nicht melden.
    Überhaupt sollte auch KAngebotsTextTextBox_TextChanged gar nicht gebraucht werden, sondern man sollte DataBinding nutzen, dann synchronisieren sich TextBox-Inhalt und DataTable-Eintrag automatisch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    rwk wird im Kopf der Form wie folgt deklariert
    Private rwK As techDBDataSet.tbl_KalkulationenRow
    und beim Laden der Form zugewiesen mit
    rwK = DirectCast(DirectCast(Tbl_KalkulationenBindingSource1.Current, DataRowView).Row, techDBDataSet.tbl_KalkulationenRow)

    ...
    Ich habe mit der Maus die Inhalte aller Variablen im Debugger anzeigen lassen. Keiner der angezeigten Werte ist Nothing

    ...
    Ja, du hast recht, ich habe bereits ein DataBinding in der TextBox und es funktioniert auch ohne _TextChanged
    Gruß Günter

    GünterD schrieb:

    Private Sub KAngebotsTextTextBox_TextChanged(sender As Object, e As EventArgs) Handles KAngebotsTextTextBox.TextChanged
    so ein TextChanged wird auch in InitializeComponents() ausgelöst, wenn per Designer etwas eingetragen ist in die Textbox.
    In solchen Fällen kann sowas verfrüht sein, weil die Initialisierungen evtl. noch net abgeschlossen sind.
    Wenn der Fehler kommt, prüfe auch mal den Callstack.
    Ansonsten kann ich das kaum glauben, dass eine NullReference-Exception kommt, aber alle relevanten Objekte sind zugewiesen.

    achja - steht da schon: _TextChanged und Databinding nix gutt - die stören sich gegenseitig.
    Ja, und später? Weil: rwK einmalig dem BindingSource.Current zuzuweisen, ist keine Dauerlösung. Das führt ins Chaos. Du musst direkt vor der lokalen Verwendung den Doppelcast vollziehen! Nicht einmalig zu Programmstart. Wenn sich bei Deiner Variante das BindingSource.Current dann nämlich ändert, ändert sich rwK nicht mehr automatisch mit!
    Also wenn dann:

    VB.NET-Quellcode

    1. Private Sub KAngebotsTextTextBox_DoubleClick(sender As Object, e As EventArgs) Handles KAngebotsTextTextBox.DoubleClick
    2. Dim rwK = DirectCast(DirectCast(Tbl_KalkulationenBindingSource1.Current, DataRowView).Row, techDBDataSet.tbl_KalkulationenRow)
    3. TextBoxText = rwK.KAngebotsText
    4. rwK.KAngebotsText = "ABC"
    5. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.