28. Mai 2008

Zeilenumbruch in .NET Textboxen

Ich habe mich soeben knapp 30 Minuten über das seltsame Verhalten und die unverständlichen Zeichen in meiner Applikation gewundert.

Und zwar wollte ich auf Änderungen des Textes einer Windows::Forms::TextBox reagieren und überprüfen, ob der aktuelle Text dem geladenen entspricht.

Nun habe ich Newline Characters verwendet a'la " \n".
Diese funktionieren meines Wissens ohne Probleme und werden auf der MSDN als Standard Linefeed chars angegeben.
Jedoch erhalte ich in der Textbox bei dessen Verwendung zwar wunderhübsche, aber dennoch nicht angebrachte Rechtecke anstelle meines implementieren Enters.

Nach kurzer Suche bin ich auf einige nette Lösungen und Problemangaben gestoßen,
die ich natürlich hier allem meinen Lesern preisgeben möchte:

Yeah, this is one of those stupid "under the hood" things that you're just expected to know somehow. In a lot of Windows text, the "new line" character is actually two characters together; namely, "\r\n". This is a carriage return followed by a new line, and it should equate to a hard return in windows text boxes.

Other OS's use just plain "\n" for new lines, which makes a lot more sense to me, but because windows uses "\r\n", it makes it a lot of fun to read text files that were created on Linux or Mac!
- Professor Musstard (CSharpHelp)


Das Problem ist der altbewährte Streitfallvon little und Big Endian -.-
Windows Leute dachten sich, es ist besser ein Zeichen zu sparen und nur "\n" zu verwenden, wogegen sich die Unixler für "mehr Kontrolle" entschieden, da es mit der 2 Charakter Methode möglich ist, in die nächste Zeile zu springen OHNE dabei den Cursor zu bewegen oder
zum Anfang derselben Zeile zu springen.

Prinzipiell finde ich ja beide Herangehensweisen irgendwie logisch nachfolziehbar... was mich jedoch echt stört, warum M$ sich dann nicht für eine Sache entscheidet und diese beibehält?
Wieso kann ich in einem Label einen Linefeed durch eine einfaches \n deklarieren, in einer Textbox jedoch nicht? Dafür kann ich in einer Textbox aber einen Tabulator mittels "\t" einfügen, was ich wiederum in einem Label noch nicht zusammengebracht habe -.-

Keine Kommentare: