VB .Net System.NullReferenceException

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von oobdoo.

    VB .Net System.NullReferenceException

    Hey, ich möchte mit folgendem Code eine Picturebox erstellen, ihnen Attributen zuweisen und zum Schluss den Controls hinzufügen.

    VB.NET-Quellcode

    1. Dim myPicturebox As PictureBox
    2. myPicturebox.Size = New Size(68, 62)
    3. myPicturebox.Location = New Point(111, 38)
    4. myPicturebox.Image = My.Resources.examplepic
    5. myPicturebox.SizeMode = PictureBoxSizeMode.StretchImage
    6. myPicturebox.BringToFront()
    7. Me.Controls.Add(myPicturebox)


    Ich weiß noch dass ich als ich früher an diesem Projekt gearbeitet hatte dieser Code funktionierte, nur jetzt kommt die Ausnahme:
    Spoiler anzeigen
    System.NullReferenceException ist aufgetreten.
    HResult=0x80004003
    Nachricht = Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Quelle = <Die Ausnahmequelle kann nicht ausgewertet werden.>
    Stapelüberwachung:
    bei MyProject.Form1.PictureBox1_Click(Object sender, EventArgs e) in C:\Users\User\Documents\Visual Studio 2017\Projects\MyProject\MyProject\Form1.vb: Zeile5
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    bei MyProject.My.MyApplication.Main(String[] Args) in : Zeile81


    Entweder ich steh gerade komplett aufm Schlauch oder ich übersehe irgendetwas.
    Ich habe in dieser Zeit nicht die IDE oder ähnliches gewechselt, ist alles gleich wie damals als ich an dem Projekt arbeitete.

    Könntet ihr mir auf die Sprünge helfen? X/ ^^



    lg Louis

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝
    Du deklarierst die PictureBox ja auch nur, aber instanziierst sie nirgends.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Mal so 'ne Frage: Wenn ich Code schreibe, der eine Exception auslöst, und den im Debugger laufen lasse, dann zeigt mir die IDE diese Exception an:

    Passiert das bei Dir nicht?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Passiert das bei Dir nicht?
    Ich denke mal, bei ihm läuft die Exe ohne Umgebung.
    @MaxeStudios Unterscheide F5 und Shift+F5 zum Start Deines Programms aus dem Studio heraus.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Trade danke für den Tipp :thumbsup:

    @Niko Ortner doch das "funktioniert" bei mir

    @RodFromGermany Mhh ich belese mich mal bezüglich einem Unterschied

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝

    MaxeStudios schrieb:

    doch das "funktioniert" bei mir


    Nun. Der Code ist in diesem Fall recht einfach, deshalb findet man die problematische Zeile auch so recht schnell. Aber bei komplexeren Situationen ist es unerlässlich, die Zeile zu kennen, in der die Exception auftritt. Deshalb ist es wichtig, dass Du die Zeile entweder mit einem Kommentar kennzeichnest, oder die Zeile zumindest irgendwo im Post erwähnst.

    Weiterführend sind die Hinweise zur Fehlerbehebung in dem kleinen Fensterchen manchmal durchaus hilfreich:
    "Überprüfen Sie, ob das Objekt NULL ist, bevor Sie die Methode aufrufen."
    Etwas ungünstig formuliert, aber es weist schon mal darauf hin, dass irgendwas NULL (in VB wird das "Nothing" genannt) ist. Der Name der Exception sagt das auch schon aus, aber wenn man das als Einsteiger noch nicht so kennt, weiß man vielleicht nicht so recht, was damit gemeint ist.

    Jetzt musst Du herausfinden, was in der betroffenen Zeile Nothing ist. Dazu gibt es mehrere Möglichkeiten:
    Die einfachste Möglichkeit ist, mit der Maus über Ausdrücke zu fahren. Dann wird in einem ToolTip der Wert angezeigt:

    Man kann auch komplexere Ausdrücke ansehen, indem man sie zum Überwachungsfenster hinzufügt. Dazu den gewollten Code auswählen, dann einen Rechtsklick drauf und "Überwachung hinzufügen" klicken:

    Dann sieht man die Ausdrücke in so einem kleinen Fensterchen:

    Jetzt sieht man sehr schön: myPicturebox ist Nothing.

    In dem Exception-Fensterchen steht noch ein guter Hinweis:
    "Erstellen Sie eine Objektinstanz mit dem Schlüsselwort 'new'."
    Also "New PictureBox", weil Du ja eine PictureBox instanziieren willst.


    Jetzt kommt nochwas hinzu:
    Der Code im Startpost lässt darauf schließen, dass der Code so in einer Methode steht:

    VB.NET-Quellcode

    1. Sub Irgendwas()
    2. Dim myPicturebox As PictureBox
    3. myPicturebox.Size = New Size(68, 62)
    4. myPicturebox.Location = New Point(111, 38)
    5. myPicturebox.Image = My.Resources.examplepic
    6. myPicturebox.SizeMode = PictureBoxSizeMode.StretchImage
    7. myPicturebox.BringToFront()
    8. Me.Controls.Add(myPicturebox)
    9. End Sub

    Aber das sollte im Normalfall eine Warnung in Zeile 3 ergeben:
    "Die myPicturebox-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten."
    Das sagt dann eigentlich schon alles.
    Wenn myPicturebox wie in meinen Screenshots außerhalb der Methode deklariert ist, dann hast Du uns mit dem Code im Startpost in die Irre geführt. Achte also darauf, dass der Code, den Du uns zeigst, auch Deine tatsächliche Situation widerspiegelt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Okay, danke für die überaus hilftreiche Erklärung :D

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝

    MaxeStudios schrieb:

    ich belese mich mal
    Sieh Dir einfach an, was das Studio Dir anbietet:
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Achso, ich debugge immer gleich mit.

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝
    Microsoft Visual Studio 2017, da wird mir das auch erst garnicht angezeigt was RodFromGermany im Screenshot zeigte. Aber laut Rod's Screenshot ist F5 starten "mit debugging", also ging ich davon aus dass es bei mir dann genau so ist :D

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝

    MaxeStudios schrieb:

    da wird mir das auch erst garnicht angezeigt was RodFromGermany im Screenshot zeigte.
    What :?:
    Oben ist Studio 10, hier Studio 13 und Studio 17:

    Es muss natürlich ein Projekt vorhanden sein.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich bin wie im folgendem Screenshot zu sehen in einem Projekt und bei mir wird nicht angeboten ohne debuggen zu starten.
    VS 2017
    Bilder
    • untitled.PNG

      25,9 kB, 499×469, 21 mal angesehen

    ╔══╦═╦╦╦═╦══╦══╦╗╔╦═╦╦═╦══╗
    ║║║║╩╠..╣╦╬╗╚╬╗╔╣╚╝║╠║║║╠╗╚╣
    ╚╩╩╩╩╩╩╩═╩══╝╚╝╚══╩═╩╩═╩══╝