Laden...

Labelgrösse dynamisch

Erstellt von MastaOfDisasta vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.740 Views
M
MastaOfDisasta Themenstarter:in
20 Beiträge seit 2005
vor 19 Jahren
Labelgrösse dynamisch

Moin Moin,

ich muss in einem Label einen Text anzeigen, der erst zur Laufzeit der Programms erstellt wird. Der Text kann dabei beliebige Längen haben. Jetzt steh ich vor dem Problem: Wie finde ich raus, wie gross das Label sein muss, damit der Text da auch rein passt?

Greetz
MoD

Life is a piece of shit, when you look at it!

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo MastaOfDisasta,

wenn der Text einzeilig ist, sollte Label.PreferredWidth liefern, was du willst.

herbivore

Y
220 Beiträge seit 2004
vor 19 Jahren
So vielleicht...

Hallo,

ein Label hat eine AutoSize-Funktion. Vielleicht kannst du die verwenden, so
sollte garantiert sein, das dein Label immer lesbar ist.
(Vom Aussehen mal abgesehen)

Hope this helps,

Yahoo

M
MastaOfDisasta Themenstarter:in
20 Beiträge seit 2005
vor 19 Jahren

Die AutoSize-Funktion bringt mich wohl nicht wirklich weiter. Son bisschen Einfluss auf das Design meiner App wollte ich schon noch nehmen. Eine feste Breite für das Label ist Pflicht.

Aber PrefferedWidth und Height werden mich wohl zum Ziel bringen. Daraus werde ich wohl meine benötigten Parameter errechnen können. Jetzt muss ich mir nur noch eine Logik entwickeln, wie ich daraus die richtigen Grössen berechne 🙂

Danke
Greetz
MoD

Life is a piece of shit, when you look at it!

381 Beiträge seit 2004
vor 19 Jahren

Das funktioniert wunderbar über die MeasureString() Methode des Grapics Objekts. Du nimmst einfach das Paint Event des Labels und misst die Größe des Textes. Folgender Code sollte helfen, ist aber ungetestet:


private void label1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
	string name = "Rene Paschold";

	SizeF s = e.Graphics.MeasureString( name, label1.Font );
	label1.Width = (int) s.Width;
	label1.Height = (int) s.Height;

	label1.Text = name;
}

Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect


.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/

M
MastaOfDisasta Themenstarter:in
20 Beiträge seit 2005
vor 19 Jahren

Hi Rene,

so weit so gut für Strings, die nur aus einer Zeile bestehen und das Label unendlich breit werden darf.

Ich habe aber einen Text, der aus bis zu 20000 Zeichen besteht mit zusätzlichen Zeilenumbrüchen (\n) drin.

Zur Zeit mach ich es so:


string myString = "ganz \\\\n viel \\\\n text mit zeilenumbrüchen"
//Den Umweg über das string[] gehe ich, weil es bisher die einfachste Möglichkeit ist die "\n"'s zu zählen. Eine Methode string.Count("\\\\n") hab ich leider nicht gefunden.
string[] test = myString.Split("\\\\n".ToCharArray());
label1.Text = myString;
label1.Size = new System.Drawing.Size(368,label1.PreferredWidth/368*label1.PreferredHeight*test.Length);

Funktioniert auch schon fast, bis auf den Umstand, dass das Label Zeilen umbricht, indem es nicht die volle Zeile ausnutzt, sondern nur zwischen Wörtern trennt. Dadurch wird der Text natürlich ein bisschen länger.

Greetz
MoD

Life is a piece of shit, when you look at it!