Announcement

Collapse
No announcement yet.

System.NullReferenceException was unhandled

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • System.NullReferenceException was unhandled

    Hallo

    Ich habe ein Problem. Ich bekomme immer ein Fehlermeldung wenn ich folgenden Code ausführe. Die Fehlermeldung ist „NullReferenceException was unhandled“. Nehme ich aber jetzt die MessageBox Anweisung aus dem Code heraus funktioniert er wunderbar. Wieso ist das so und was kann ich gegen die Fehlermeldung tun?


    if ((int)bGruen.Value + (int)chGruen.Value < 0)
    {
    chGruen.Value = -(int)bGruen.Value;
    MessageBox.Show("Die Änderung bei Grün darf maximal " + ( int)chGruen.Value + " betragen",
    "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    }




    System.NullReferenceException was unhandled
    Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
    Source="System.Windows.Forms"
    StackTrace:
    bei System.Windows.Forms.UpDownBase.UpDownButtons.Time rHandler(Object source, EventArgs args)
    bei System.Windows.Forms.Timer.OnTick(EventArgs e)
    bei System.Windows.Forms.Timer.TimerNativeWindow.WndPr oc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.Run(Form mainForm)
    bei Farbmanagement.Program.Main()
    bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    bei Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
    bei System.Threading.ThreadHelper.ThreadStart_Context( Object state)
    bei System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException:


    Danke für Eure Hilfe und liebe Grüße
    Stefan

  • #2
    Hallo Stefan,

    dieser Fehler gehört ja wohl zu den grundlegendsten, die selbst gefunden werden können:
    NullReferenceException-Klasse
    Die Ausnahme, die bei einem Versuch ausgelöst wird, einen Verweis auf ein NULL-Objekt zu dereferenzieren.
    Ein Element Deiner MessageBox-Anweisung ist also null, aber welches?

    Du schreibst nichts davon, was chGruen ist: welcher Typ, ob das vielleicht null sein kann, welcher Typ Value ist, ob das vielleicht null sein kann oder kein int ist. Als wahrscheinlichstes vermute ich, dass chGruen.Value "von Haus aus" nicht int ist und bei der Konvertierung durch (int) ein null-Wert entsteht.

    Außerdem schlage ich vor, für die String-Verknüpfung nur Strings zu verwenden und keinen Integer (oder mit String.Format() zu arbeiten). Vielleicht helfen auch Klammern, damit die Reihenfolge der Konvertierung genauer vorgegeben wird.

    Jürgen

    Comment


    • #3
      Danke Jürgen für Deine Antwort. Der Wert chGruen ist nicht 0. Die MessageBox wird korrekt dargestellt und mit dem Klick auf den „OK“ Button entsteht der Fehler.
      Da ich leider erst ein Anfänger in C# bin komme ich leider nicht auf die Lösung.
      chGruen.Value kann die Werte von -128 bis 128 annehmen. Nach einem Test ging es ungefähr 10mal dann trat der Fehler wieder auf.

      Gruß Stefan

      Comment


      • #4
        Hallo Stefan,
        Originally posted by Stefan3110 View Post
        Der Wert chGruen ist nicht 0. Die MessageBox wird korrekt dargestellt und mit dem Klick auf den „OK“ Button entsteht der Fehler...

        chGruen.Value kann die Werte von -128 bis 128 annehmen. Nach einem Test ging es ungefähr 10mal dann trat der Fehler wieder auf.
        bitte schreibe null wenn es sich um "nichts" handelt, und 0, wenn die Zahl 0 gemeint ist. Das ist dann jeweils eindeutig.

        Es kann nicht sein, dass der Fehler durch Klick auf "OK" entsteht. Wenn die MessageBox korrekt dargestellt wird, kann es bei ihrem Aufruf keinen Fehler geben. Also sind meine bisherigen Hinweise und Nachfragen völlig irrelevant.

        Der Fehler muss also in einen völlig anderen Zusammenhang gehören, vor allem wegen des sporadischen Auftretens. Du verheimlichst immer noch, was chGruen und bGruen eigentlich sind. Ebenso habe ich keine Ahnung, in welchem Zusammenhang die Werte eingetragen, ausgewählt oder geprüft werden.

        Neue Vermutung: Du hast irgendwo Ereignisse (Validating, Change, Click) mit irgendwelchen Maßnahmen, bei denen automatisch Korrekturen vorgenommen werden und die zitierte Eingabeprüfung ausgelöst wird. Vielleicht führt Deine zitierte Korrektur-Zuweisung zum Fehler, weil nach der MessageBox die Anzeige aktualisiert werden muss.

        Vorschlag: Setze zuerst die MessageBox, dann die Korrekturmaßnahme, und diese bekommt einen Haltepunkt für den Debugger.

        Aber ohne genauere Informationen kann ich wirklich nur raten. Jürgen

        Comment


        • #5
          Wenn Du es erlaubst kann ich Dir gern mal das Projekt zumailen.

          Comment


          • #6
            Originally posted by Stefan3110 View Post
            Wenn Du es erlaubst kann ich Dir gern mal das Projekt zumailen.
            Das ist (noch) nicht angemessen. Zunächst darfst Du den Debugger intensiv benutzen und selbst nach Möglichkeiten suchen. Eine Reihe von Hinweisen habe ich schließlich gegeben. Solange Du dazu keine Erläuterungen gibst... Jürgen

            Comment


            • #7
              Leider finde ich auch mit Hilfe des Debuggers den Fehler nicht.
              chGruen und bGruen sind Integer Werte.
              Was ich nicht verstehe ist wenn ich die Messagebox herausnehme tritt der Fehler nicht mehr auf. Sobald ich sie reinnehme (auch nur mit dem Text "Hallo") taucht der Fehler wieder auf.

              Nach dem Klick auf Okay bricht das Programm mit der Fehlermeldung (siehe oben ab) und es ist folgende Codezeile
              Application.Run(new Druckfarbe());
              hinterlegt.

              Danke für Deine Hilfe Jürgen. Bitte entschuldige wenn ich solche Anfängerfragen stelle.

              Viele Grüße
              Stefan

              Comment


              • #8
                Versuch mal im VS Menu unter Debug/Exceptions für CLR Exceptions den 'thrown'-Haken zu setzen. Dann sollte die Anwendung beim debuggen halten wenn die Exception geworfen wird und nicht erst wenn die behandelt wird.
                Die Stelle an der gehalten wird zeigt dir vielleicht eher was schief läuft.

                Noch'ne Vermutung. Laut deinem Stacktrace ist ein Timer beteiligt (korrekt?). Während eine MessageBox angezeigt wird werden TimerEvents nicht abgearbeitet(die MessageBox ist ja modal und die darunter liegenden Form sind solange nicht aktiv), sondern der Timer Event bzw. die Timer Events sammeln sich in der Messageschleife. Sobald du die MessageBox schließt werden die dann endlich abgearbeitet. Ich könnte mir Vorstellen das du dadurch vielleicht ein Reihenfolgenproblem hast (da der Eventhandler für den Timer später ausgeführt als vielleicht von dir erwartet).

                Comment

                Working...
                X