Hi,
ich würde gern ein String darauf prüfen, ob sein Inhalt einzeilig oder mehrzeilig ist.
Sozusagen möchte ich ja nach Inhalt das StringAlignment ändern:
string Text = XXX.Label_Text;
SizeF TextSize = TextRenderer.MeasureText(Text, new Font(Font_OCR_Label.Name, Font_Size_temp));
StringFormat sf = new StringFormat();
if(Text == einzeilig)
{
sf.Alignment = StringAlignment.Center;
}
else
{
sf.Alignment = StringAlignment.Near;
}
Im einfachsten Fall kannst du mit Split den String aufteilen.
Wenn das Ergebnis Length == 1 hast du nur eine Zeile ansonsten mehrere.
Dabei musst du beachten, dass es unter Windows \r\n und unter allen anderen sonst \n gibt.
Kann man aber mit Split(new char[] { '\n', '\r' } abfangen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
if (Text.Contains(Environment.NewLine)) ...
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Environment.NewLine
ist der bessere Weg.
Bitte, wenn möglich nicht mehr manuell auf \r\n bzw \n prüfen; ansonsten bekommt man schnell Probleme, wenn man bedenkt, dass .NET mittlerweile Multi Plattform ist.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
@Abt
Stimmt.
Liegt aber auch daran, dass NewLine beim Framework noch "\r\n" hardcoded war.
Entsprechend lieferte die Split dann bei Texten mit \n only nur eine Zeile, weshalb ich dies immer über die char[] Variante mache.
Bei .NET 5 ist es nun auf "\n" umgestellt, da klappen beide Fälle.
.NET Framework:
https://referencesource.microsoft.com/#mscorlib/system/environment.cs,63a04833d43dd9d3
.NET 5:
https://source.dot.net/#System.Private.CoreLib/Environment.cs,63a04833d43dd9d3
dotnet Fiddle Beispiel:
https://dotnetfiddle.net/dQRRiw
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo T-Virus ,
Bei .NET 5 ist es nun auf "\n" umgestellt, da klappen beide Fälle.
source.dot.net sucht in der Unix-basierten Runtime, daher ist deine Aussage nicht ganz vollständig.
Environment.UnixOrBrowser.cs <-> Environment.Windows.cs.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Aber unter Windows ist auch bei .NET 5 dieser Wert weiterhin "\r\n" (habe es gerade bei einem WindowsForms-Projekt in VS 2019 ausprobiert).
Hätte mich auch stark gewundert, wenn dies geändert worden wäre.
Bei Plattform spezifischen Sachen bitte immer mitdenken, dass die auswertende Plattform eine andere sein kann, als die eingebende.
Beispiel: Eingabe unter Windows im Browser auf eine ASP.NET Core Seite, die unter Linux läuft!
Wenn man nur wissen möchte, ob ein String einen Zeilenumbruch enthält, dann geht das am einfachsten so:
bool isMultiLine = someText.Contains('\n');
Das funktioniert mit Texten von (fast) allen Systemen, denn die meisten Systeme benutzen irgendeine Kombination mit '\n' oder nur '\n' für einen Zeilenumbruch.
Weeks of programming can save you hours of planning
No, MacOS hat \r (und uralt IBM Server nutzen noch mal nen anderen Quatsch)(
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Falls das .NET auf einem System nicht korrekte Werte zurückgibt würde ich die Zeichen nicht in die if Abfrage einbauen sondern eher eine eigene Methode schreiben :
if (Text.Contains(EnvironmentNewLine()))
...
public string EnvironmentNewLine()
{
if (Environment.OS == "IBM Xenix") return "\n"; // nur ein Beispiel
else return Environment.NewLine;
}
Wenn ich eine Abfrage nur einmal brauche und das dann auch noch so selbstbeschreibend ist speichere ich nicht in einer Zwischenvariablen.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
@Abt, aber nur beim alten Classic Mac OS, seit Mac OS X wird (wie bei Unix) '\n' benutzt - steht auch so in der deutschen als auch englischen Wiki: NewLine: Representation + Zeilenumbruch: Codierung des Zeilenumbruchs
Hallo,
aber nur beim alten Classic Mac OS, seit Mac OS X wird (wie bei Unix) '\n' benutzt
Würde jetzt Windows auch nur noch auf \n
setzen, so wäre etlicher Code einfacher und performanter (beides zugleich: Juhuu) zu schreiben.
Ist vermutlich mehr ein Wunsch als (nahe) Realität.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
@gfoidl
Ich geb die Hoffnung nicht auf 🙂
Vor 10 Jahren hätte ich auch Leute ausgelacht, die mir erklären Software von Microsoft läuft auch irgendwann auf Linux 🙂
Und Heute nutzen wir zur Entwicklung den SQL Server auf einer Linux Bude im Container.
Also kann sich da auch noch was ändern.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.