MeasureString System.NullReferenceException



  • Ich wollte die Länge eines Strings bekommen, klappt aber einfach nicht..

    1. this->text = gcnew String("Das ist ein Test-String, gefüllt mit Text");
    2. System::Drawing::Font^ f = gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0));
    3. Graphics^ g;
    4. g->PageUnit = GraphicsUnit::Pixel;
    5. SizeF^ w;
    6. w = gcnew SizeF(g->MeasureString(text, f));
    

    Bei Zeile 4, bzw. wenn ich diese Auslasse bei Zeile 6, kriege ich diese Meldung:

    Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in System.Drawing.dll aufgetreten.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Benötige dringend Hilfe, hab erfolglos nach Beispielen gesucht, wie man MeasureString richtig anwändet, hab aber leider nichts gefunden.
    Wäre froh wenn mir jemand erklären könnte wie dieser Fehler zustande kommt..



  • Graphics^ g;
    g->PageUnit = GraphicsUnit::Pixel;
    

    Das geht net 😉

    Du musst g schon etwas zuweisen^^



  • und was?



  • Na ich würde mal meinen, eine Instanz der Klasse Graphics ? Versuch mal ein Graphic -Objekt zu erzeugen, bevor du g benutzt. Graphics::FromImage oder CreateGraphics (Wenn du in einer Form arbeitest)



  • danke, hat geklappt 🙂

    ich hab aber noch eine Frage zum Thema MeasureString...

    Die Funktion MeasureString(String^ s, Font^ f, Int32 width) sollte nach MSDN, sofern ich das richtig verstanden habe, die Anzahl der Zeichen des gemessenen Strings zurückgeben, die höchstens width breit sind:

    Der width-Parameter gibt den Höchstwert für die Breitenkomponente der zurückgegebenen SizeF-Struktur (Width) an. Wenn der width-Parameter kleiner als die tatsächliche Breite der Zeichenfolge ist, wird die zurückgegebene Width-Komponente auf einen Wert abgeschnitten, der die maximale Anzahl von Zeichen darstellt, die in die angegebene Breite passen. Um die gesamte Zeichenfolge aufnehmen zu können, wird die zurückgegebene Height-Komponente auf einen Wert angepasst, der die Anzeige der Zeichenfolge mit einem Zeilenumbruch ermöglicht.

    Ich kann mit dem zurückgegebenen Wert allerdings nichts anfangen, bekomme 213.xxxx obwohl der String höchstens 80 Zeichen umfasst


Anmelden zum Antworten