kostenloser Webspace werbefrei: lima-city


C#: Eigene MessageBox-Klasse -> Zeilenumbrüche

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    Hallo!

    Ich bin nun seit einiger Zeit dabei mir eine eigene MessageBox-Klasse zu schreiben aber scheitere an den Zeilenumbrüchen.. Am Anfang hab ich das ohne drüber nachzudenken einfach an der Länge des Strings gemessen, was aber natürlich nicht sehr effektiv war. Anschließend hab ich versucht mit MeasureText die Breite der Zeilen zu messen, was aber auf eigenartige Weise nur ungenaue Resultate lieferte.
    Jetzt wollte ich das mit RectangleF lösen, was aber wieder ganz neue Probleme ergibt..
    Viele andere Möglichkeiten habe ich nicht mehr gefunden.. Wie löst man sowas am besten? Die Version mit RectangleF scheint vonn allen Möglichkeiten noch am tauglichsten, nur weiß ich nicht an was ich die Größe dann anpassen soll.. An den Inhalt anpassen funktioniert ja leider nicht.
    Weiß vielleicht jemand wie das genau in der Standard-MessageBox-Klasse funktioniert?

    Danke im Voraus!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo yorecords,

    hier werden zwei Möglichkeiten vorgestellt:
    http://www.codeproject.com/Articles/2118/Bypass-Graphics-MeasureString-limitations
  4. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    darkpandemic schrieb:
    Hallo yorecords,

    hier werden zwei Möglichkeiten vorgestellt:
    http://www.codeproject.com/Articles/2118/Bypass-Graphics-MeasureString-limitations


    Danke für deine Hilfe!
    Das ist zwar nicht ganz das was ich gesucht habe, aber es funktioniert. Leider halt sehr umständlich (oder ich gehe einfach nicht richtig damit um).
    Mein Plan wäre es, mit der zweiten Methode auf der Seite mal die Breite zu ermitteln und dann mit unzähligen ifs und else ifs das RectangleF je nach Breite des Strings in seiner Höhe und Breite anzupassen und anschließend das Fenster an das RectangleF anzupassen...
    Geht das vielleicht irgendwie einfacher oder hab ich das schon richtig verstanden?

    Beitrag zuletzt geändert: 28.8.2012 20:49:11 von yorecords
  5. Hallo yorecords,

    ich habe gerade festgestellt, dass das eigentlich ganz einfach geht (sofern der Text z.B. in einem Label angezeigt wird):
    label1.Text = text;
    Size size = label1.GetPreferredSize(new Size(400,0));
    label1.Size = size;
    Das Argument von GetPreferredSize() gibt dabei die maximale Größe an. In dem Beispiel also maximal 400 Pixel breit und beliebig hoch.
  6. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    darkpandemic schrieb:
    Hallo yorecords,

    ich habe gerade festgestellt, dass das eigentlich ganz einfach geht (sofern der Text z.B. in einem Label angezeigt wird):
    label1.Text = text;
    Size size = label1.GetPreferredSize(new Size(400,0));
    label1.Size = size;
    Das Argument von GetPreferredSize() gibt dabei die maximale Größe an. In dem Beispiel also maximal 400 Pixel breit und beliebig hoch.


    Wow! Das wäre eigentlich perfekt gewesen.. Naja aber ich hab es jetzt schon auf die umständliche Weise gelöst. Auf diese Weise konnte ich halt auch genau definieren wann es wieviel breiter bzw höher werden soll (also beispielsweise bis 600 in die Breite gehen, ab da dann höher werden und ab 1500 wider in die Breite usw...). Ich glaube bei der Standard-MessageBox dürfte es auch irgendwie so gelöst worden sein.
    Jedenfalls wieder mal vielen Dank für deine Hilfe!

    Edit:

    Hab das jetzt doch auf deine Weise gelöst. Diese Variante reduziert dann doch sicher über 100 Zeilen Code auf unter 10..

    Beitrag zuletzt geändert: 31.8.2012 0:25:44 von yorecords
  7. Hi.

    geht auch ganz einfach!

    MessageBox.Show("erste Zeile\r\nzweite Zeile!");

    \r = Carriage Return (wagenrücklauf
    \n new Line (neue Zeile)

    unter Windows ist ein Zeilenumbruch \r\n (euch wenn \n schon für neue zeile steht)
  8. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    phphilfe schrieb:
    Hi.

    geht auch ganz einfach!

    MessageBox.Show("erste Zeile\r\nzweite Zeile!");

    \r = Carriage Return (wagenrücklauf
    \n new Line (neue Zeile)

    unter Windows ist ein Zeilenumbruch \r\n (euch wenn \n schon für neue zeile steht)


    Man sollte eine Frage immer zuerst lesen bevor man sie beantwortet.. :wink: Außerdem ist das Problem schon gelöst.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!