Wie schaffe ich es, dass meine Wertetabelle (RichTextBox) in C# einheitlich und symmetrisch dargestellt wird?

1 Antwort

Ich würde es gar nicht mit einer RichTextBox machen, da hast Du eben nur Text zur Positionierung.

Wenn die RichTextBox bleiben soll, bleibt dir nur, dass Du mit Leerzeichen positionierst. Das Einfachste wäre z.B. dass Du allen positiven Zahlen ein Leerzeichen voranstellst. Sollen die Kommata übereinander stehen, bleibt dir nur Vorausrechnen, welche Werte Du hast und dann mit Hilfe der Leerzeichen z.B. fehlende Ziffern vorne aufzufüllen.
Das alles hängt aber stark vom Zeichensatz ab, denn Zahlen, Sonderzeichen und Leerzeichen sind nicht unbedingt gleich lang. Du könntest noch etwas tricksen, indem Du andere Zeichen als das Leerzeichen verwendest, dann aber weiß darstellst, ich könnte mir vorstellen, dass das mit der RichTextBox geht, aber nicht so, wie Du sie nutzt ;)
Gegen die Minus-Zeichen kann eventuell die RichTextBox etwas tun, vielleicht kann man die Ausrichtung umdrehen und Du schreibst die Zahlen nicht von links nach rechts, sondern von rechts nach links. Wenn ich mich richtig erinnere, müsste das mit den Tabs gut gehen, dass alle Zahlen dann rechtsbündig ausgerichtet sind, wie es z.B. Excel auch macht.

Wenn keine RichTextBox genutzt werden soll, sehe ich zwei Wege:

Komplett selber zeichnen. Wenn Du ein Panel selber füllst, kannst Du die Pixel frei positionieren und entsprechend nahezu perfekt ausrichten. WinForms bietet dafür Tools an, um z.B. die Maße eines Strings zu berechnen, für alles Weitere brauchst Du viel Mathe.
Dieses Vorgehen dürfte auch das Performanteste sein, da Du besonders gut optimieren kannst und sehr wenig Overhead hast.

Oder Du nutzt viele Controls und lässt WinForms automatisch positionieren. Z.B., wenn die Kommata mittig stehen lossen, könntest Du die Zahlen am Komma splitten und für beide Zahlen sowie das Komma Labels in eine Tabelle stecken. Die Tabelle kannst Du dann so stylen, wie Du es brauchst.
Das ganze muss natürlich dynamisch laufen und fordert etwas mehr Kentniss über WinForms an sich, als bei der anderen Methode, wo man eigentlich ja nur Pixel malt.
Außerdem dürfte das relativ langsam sein, da z.B. die Tabelle auf sehr allgemeine Dinge ausgelegt ist und Du sie dabei mit zig winzigen Labels füllst, die alle berechnet werden müssen und Overhead mit bringen. Ob das bei so wenigen Werten relevant ist - vermutlich nicht.
Oder Du nutzt ein Label je Zahl und stellst das Alignment auf rechts, dann hast Du das gleiche Verhalten wie Excel und weniger Overhead.

Oder, die dritte "Möglichkeit":
Nicht ausrichten.
Ist das wirklich eine Anforderung? Wenn nicht: Für ein produktiv eingesetztes Programm würde ich mir die Arbeit einfach sparen, da so ein Feature nicht notwendig für die eigentlichen Funktionen des Programms ist und es die Nutzer vermutlich nicht mal besonders stört, wenn die Zahlen nicht ausgerichtet sind. Z.B. Excel macht das ja auch nicht. Viel wichtiger ist, dass alles andere fehlerfrei und gut funktioniert, danach kommen so kleine Schönheitsoperationen.


BeatlesNerd 
Beitragsersteller
 30.05.2021, 14:20

Zunächst danke für deine Antwort! Also damit ich es richtig verstehe, gibt es keine richtige Möglichkeit das Minusvorzeichen um eins nach links zu verschieben, damit alles symmetrisch ist?

0
Palladin007  30.05.2021, 14:39
@BeatlesNerd

Nö.

Für die TextBox ist das Minus auch nur ein x-beliebiges Zeichen, wie die Zahlen oder das Komma auch. Wenn Du negative Zahlen in irgendeiner Form symmetrisch anordnen willst, musst Du es selber machen. Excel macht es sich da einfach: Sie richten einfach nach rechts aus.

0