+ Antworten
Ergebnis 1 bis 8 von 8
  1. #1
    Architekt Avatar von hashtag
    Registriert seit
    15.12.2013
    Beiträge
    1.296

    C# - Control.Height -> NullReferenceException

    Und wieder einmal habe ich ein Problem mit C#...

    Ich habe mir folgende Methode geschrieben, um Elemente horizontal zu zentrieren. Wenn ich diese aufrufe wirft die Zeile mit "int p_height = container.Height;" jedoch aus mir unverständlichen Gründen eine NullReferenceException aus. Wüsste da jemand Abhilfe?

    Code:
    public static void CenterHorizontallyInContainer(Control control, Control container) {
     int p_height = container.Height;
     int c_height = control.Height;					// control height
     int margin_top = (p_height - c_height) / 2;
     control.Location = new Point (control.Location.X, margin_top);
    }
    Die Methode ist in der Klasse "CenterControl" im Namespace "HMC_Utilities" deklariert, und wird mit "CenterControl.CenterHorizontallyInContainer(contr ol, container) aufgerufen. Eine fast auf den Wortlaut gleiche Methode, die das ganze mit einem Form und form.ClientSize.Width durch exzerzierte warf an derselben Stelle den selben Fehler aus.

    Edit: (28.04.2017 um 20:28)

    Ich kann auch nicht feststellen, ob sich der Fehler auf "container" oder "container.Height" bezieht.

    queer as fuck!
    RPCMC – Utility zum Erstellen eines Blanko-Ressourcenpaketes — Präsentationen in HTML? Warum nicht?

    MCR <3


  2. #2
    They're taking the Hobbits to Isengard! Avatar von Hobbit9797
    Registriert seit
    31.01.2011
    Beiträge
    2.960
    VisualStudio oder welche IDE du auch immer verwendest hat doch bestimmt einen eingebauten Debugger, oder? Da setzt du einfach nen Breakpoint an die richtige Zeile und guckst nach, welches Objekt hier null ist. Ich würde da mal vom container ausgehen.

  3. #3
    DEV Avatar von Black__Hole
    Registriert seit
    15.09.2011
    Beiträge
    3.818
    Dort kann dann nur container null sein.

    Ich würde dir empfehlen, WPF für Oberflächen zu verwenden. Dies unterstützt von Haus aus verschiedenste Layouts mit automatischer Anpassung an den Inhalt.


  4. #4
    Architekt Avatar von hashtag
    Registriert seit
    15.12.2013
    Beiträge
    1.296
    Also.

    Funktion wird innerhalb einer von Form abgeleiteten Klasse "InformationWindow" aufgerufen. Diese Klasse ruft beim erzeugen die Funktion zum Zentrieren auf, um das Element XY innerhalb des Fenster - also sich selbst - zu zentrieren, "container" ist also "this". Daran dürfte es vermutlich hängen. Ich habe aber null Ahnung, was da zu tun wäre.

    Edit: (29.04.2017 um 17:56)

    Ich habe alle Aufrufe der Funktion auskommentiert - das Programm stürzt immernoch(!) ab, und die Stelle in der Funktion wird als Fehler angezeigt, obwohl die Funktion nie gecallt wird!

    Edit: (29.04.2017 um 17:57)

    Wenn ich die problematische Stelle in der Funktion selbst auskommentiere, wird die auskommentierte Zeile als Fehler angegeben! Was zum Fuck ist da los?

    queer as fuck!
    RPCMC – Utility zum Erstellen eines Blanko-Ressourcenpaketes — Präsentationen in HTML? Warum nicht?

    MCR <3


  5. #5
    DEV Avatar von Black__Hole
    Registriert seit
    15.09.2011
    Beiträge
    3.818
    Das klingt so, als wenn du du es irgendwie schaffst, das Programm ohne deine Änderungen auszuführen. Ich vermute also mal, dass du nicht Visual Studio verwendest.


  6. #6
    Architekt Avatar von hashtag
    Registriert seit
    15.12.2013
    Beiträge
    1.296
    MonoIDe bzw. heißt jetzt Xamarin irgendwas.

    Das Problem mit dem ohne Änderungen habe ich inzwischen gefunden - die Assebmyl Reference für meine selbstgeschriebenen Sachen, in der sich auch der problematische Code befand, war auf den Pfad der Releaseversion gesetzt (bin/Release/HMC_Utilities.dll), das Programm habe ich aber immer als Debugversion kompiliert (bin/Debug/HMC_Utilities.dll).

    Das erklärt aber nicht, wieso container null ist, wenn ich ein existierendes Control als Argument übergebe.

    queer as fuck!
    RPCMC – Utility zum Erstellen eines Blanko-Ressourcenpaketes — Präsentationen in HTML? Warum nicht?

    MCR <3


  7. #7
    DEV Avatar von Black__Hole
    Registriert seit
    15.09.2011
    Beiträge
    3.818
    Am Visual Studio 2015 ist Xamarin integriert. Schaue dir mal Visual Studio 2017 Community an: https://www.visualstudio.com/de/downloads/

    Mit Windows Forms habe ich schon sehr lange nicht mehr gearbeitet. Ich vermute jetzt mal, dass du deine Funktionen aufrufst bevor die Kontrollelemente fertig initialisiert sind.


  8. #8
    Architekt Avatar von hashtag
    Registriert seit
    15.12.2013
    Beiträge
    1.296
    Also irgendwas läuft da gewaltig schief. Ich habe meiner DLL was hinzugefügt, neu kompiliert, die Reference dazu im anderen Projekt aktualisiert und das auch neu kompiliert, aber die neu hinzugefügte Klasse ist garnicht erst vorhanden. WTF?

    queer as fuck!
    RPCMC – Utility zum Erstellen eines Blanko-Ressourcenpaketes — Präsentationen in HTML? Warum nicht?

    MCR <3


+ Antworten