Hallo,
ich habe folgende Situation:
<u>Problem:</u> Ich möchte den Inhalt z.B. einer Stringliste (string[]) von variabler Länge in einem Feld (Panel, Textbox oder Listbox) unterbringen und den benötigten Platz (Size in Pixel) bestimmen.
<u>Lösung:</u> Folgendes funktioniert problemlos:
// aStr ist das String-Array
// ctl ist das jeweils gewünschte Control
int iHoehe = (int)(aStr.Length * ctl.Font.GetHeight());
// erzeuge das Graphics-Objekt des Controls
int i1, iBreite = 0;
System.Drawing.Graphics gr = ctl.CreateGraphics();
foreach( System.String s0 in aStr ) {
i1 = (int)gr.MeasureString(s0, ctl.Font).Width;
if (i1 > iBreite) iBreite = i1;
}
Und das kann ich in eine Standardfunktion auslagern.
<u>Ungünstig</u> empfinde ich, dass bei jeder dieser Situation <b>ctl.Graphics</b> erzeugt und in jeder Zeile MeasureString() mit ctl.Font ausgeführt werden muss (und ich jedesmal viel Code schreiben muss). <b>Optimiert</b> der Compiler (bei mir Borland-C#) dies ausreichend? Lohnt es sich, Graphics manuell dem <b>GarbageCollector</b> auszuliefern? Gibt es <u>schnellere und/oder einfachere</u> Verfahren?
Danke für Hinweise!
Jürgen
ich habe folgende Situation:
<u>Problem:</u> Ich möchte den Inhalt z.B. einer Stringliste (string[]) von variabler Länge in einem Feld (Panel, Textbox oder Listbox) unterbringen und den benötigten Platz (Size in Pixel) bestimmen.
<u>Lösung:</u> Folgendes funktioniert problemlos:
// aStr ist das String-Array
// ctl ist das jeweils gewünschte Control
int iHoehe = (int)(aStr.Length * ctl.Font.GetHeight());
// erzeuge das Graphics-Objekt des Controls
int i1, iBreite = 0;
System.Drawing.Graphics gr = ctl.CreateGraphics();
foreach( System.String s0 in aStr ) {
i1 = (int)gr.MeasureString(s0, ctl.Font).Width;
if (i1 > iBreite) iBreite = i1;
}
Und das kann ich in eine Standardfunktion auslagern.
<u>Ungünstig</u> empfinde ich, dass bei jeder dieser Situation <b>ctl.Graphics</b> erzeugt und in jeder Zeile MeasureString() mit ctl.Font ausgeführt werden muss (und ich jedesmal viel Code schreiben muss). <b>Optimiert</b> der Compiler (bei mir Borland-C#) dies ausreichend? Lohnt es sich, Graphics manuell dem <b>GarbageCollector</b> auszuliefern? Gibt es <u>schnellere und/oder einfachere</u> Verfahren?
Danke für Hinweise!
Jürgen