Richtextbox Einträge/Zeilen "ordnen" - sollen schön untereinander stehen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Guinnes.

    Richtextbox Einträge/Zeilen "ordnen" - sollen schön untereinander stehen

    Nabend,


    "kleines" problem in meinem projekt:


    ich lasse den user über mehrere maskedtextboxen eingaben machen und zwar pro eintrag/zeile genau 5 (letzter eintrag "summe" wird automatisch berechnet)

    datum | zeit | zahl1 | zahl2 | bemerkung | summe

    nun werden diese eintrage in eine DGV übernommen und in eine xml gespeichert (nur als neben info - hat mit meinem problem nix zu tun).

    dann wird der inhalt der dgv eine rtf datei geschrieben, ich mach das so dass ich den inhalt aus der dgv in eine richtextbox schreiben lasse (diese wird dann zur laufzeit ausgelendet).

    nun zum eigentlichen problem:

    da die einträge zahl1 ; zahl2 ; bemerkung unterschiedliche längen haben können (anzahl der eingebenen zeichen) sieht die rtf datei im wordpad demenstsprechend "unschön" aus.......


    wie kann ich die richtextbox vor dem schreiben in die *.rtf datei so formatieren dass die anfangsbuchstaben der "spalten" immer genau untereinander stehen ???

    zur veranschaulichung nochmal der derzeitige, "unsaubere" zustand der *.rtf Datei (soll u.a. gedruckt werden)


    Datum Zeit Zahl1 Zahl2 Bemerkung Summe

    24.03.12 18:19 1 0 nur so mal 12
    24.03.12 18:34 0 12 kürzer 12



    die datums und zeiteingabe hab ich "fest" eingstellt dass eben immer die gleiche anzahl zeichen benutzt werden, das geht aber spätestens bei "bemerkung" nicht mehr.....

    jemand ne idee ?????

    Vielen Dank für eure Hilfe !!!!!!!!!!!!!!!!!!!

    Guinnes
    Also ich hab das jetzt so verstanden, dass du statt der "|" einen Zeilenumbruch haben willst? Dann wäre nämlich mein Vorschlag die Replace Anweisung...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. RichTextBox1.Text = Replace(RichTextBox1.Text, "|", vbCrLf) 'vbCrLf steht hier für einen Zeilenumbruch...
    3. End Sub
    vielen dank erstmal.....

    @telcrome: nein, die | stehen nicht für nen zeilenumbruch. die zeile hat jeweils 6 einträge (Datum, Zeit, Zahl1, Zahl2, Bermerkung, Summe) dann kommt der Zeilenumbruch.

    So weit geht das ja auch alles.....ABER:
    dadurch das zahl1 und zahl2 einstellig (zb. 5) oder 2 stellig (zb. 11) sein kann
    und die spalte "bemerkung" sowohl 3 als auch 18 stellig ausfallen kann, verschiebt sich eben die anschließenden Einträge.

    die zahl1/zahl2 kann ein oder zweistellig sein......

    Also wenn zb. der eintrag bei "bemerkung" lang ist, beginnt der eintrag "summe" eben weiter hinten und nicht unter dem letzten eintrag "summe" aus der vorherigen zeile.....

    die bemerkung und summe zu tauschen ginge auch, würde aber der logig der "tabelle" widersprechen....

    mein ester ansatz war das ich bereits bei der eingabe die zeichen der eingabe zähle und eben jedesmal auf eine bestimmte anzahl erhöhe, in etwa so.....


    VB.NET-Quellcode

    1. 'If MaskedTextBox10.Text.Length < 15 Then
    2. ' Do Until MaskedTextBox10.Text.Length = 25
    3. ' MaskedTextBox10.Text = MaskedTextBox10.Text & " "
    4. ' Loop
    5. 'End If


    ging aber nicht, da zahl1/zahl2 ein integer ist.....geht aber sicher anzupassen.

    ich hänge mal eine so ertsellte rtf an.....da sieht man es am besten.....

    falls es nicht geht, dreh ich eben die eingaben bemerkung / summe und formatiere die zahlen eingaben, geht sicher auch......

    danke schön,

    Guinnes
    Dateien
    • liste.rtf

      (1,14 kB, 185 mal heruntergeladen, zuletzt: )
    Du musst in Deine Zeilen Tabulatoren einfügen.
    Such mal unter RichTextBox Tabulator.
    Im Ernstfall erstellst Du Dir ein Dolument im WordPad, speicherst es ab und untersuchst den RTF-File.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @FloFuchs:
    Wir reden hier von RichTextBox, nicht aber von MaskedTextBox. :D :D :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ansatz:

    VB.NET-Quellcode

    1. Dim Datum, Zeit, zahl1, zahl2, bemerkung, summe As String
    2. RTB.Text = Datum & " " & Zeit & " " zahl1 & " " & zahl2 & " " & bemerkung & " " & summe


    weiter streng eigenen schmalz an....kannst auch mit Array's lösen...einfacher gehts nicht mehr...
    vielen dank!

    hab mir das ganze nochmal durch den kopf gehen lassen und werde wirklich einfach die reihenfolge umstellen.....

    neue reihenfolge:

    Datum (immer gleich lang); Zeit (immer gleich lang); Zahl1 ; Zahl2; Summe; Bemerkung


    Zahl1 / Zahl2 muss beim übernehmen (NACH der berechnung der Summe) zweistellig werden also aus 8 muss 08 werden, falls die zahl eben nur einstellig ist.

    Summe ist zu 99% immer 3 stellig und Bemerkung steht am Ende der Zeile, kann also unterschiedich lang sein ohne "doof" auszusehen.

    ich danke euch nochmal......ohne eure hilfe hätte ich wohl schon längst wieder die flinte ins korn geworfen :love:


    @system unknown: die "zahl 1 / 2" und "summe" sind integer wegen der berechnung, kann man die denn einfach wieder ins string wandeln ?
    würde ich ja machen (nach der berechnung) um zB. aus 8 eine 08 zu machen....oder gibst ne andere/bessere lösung.

    ggf. mit
    MaskedTextBox1.Text.Format() ohne eine wandlung int -> string ? ob da die berechnung noch funzt ?
    sorry kanns gerade nicht testen....


    werde mich trotzdem mit array befassen.....
    Guinnes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Guinnes“ ()

    Bei die Werteausgaben brauchst nicht unbedingt den Ergebniss in string konvertieren, aber wenn du willst kannst "tostring" anhängen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „SystemUnknow“ ()

    Wenn Texte mit gleicher Zeichenanzahl gleich lang sein sollen, musst Du Dir einen Font wählen, bei dem ein "i" und ein "m" gleich breit ist.
    Das sind nichtproportionale Schriftrarten, z.B. Courier, CourierNew.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    daraus lässt sich eben recht leicht ne rtf datei schreiben.


    Listview/Datagridview kannst auch in Datein schreiben und wieder laden.
    Datagridview kannst in Excel exportieren und wieder importieren, für dein Vorhaben gibts zig möglichkeiten, aber nicht diese was du ausgesucht hast.
    Genau.
    an ein DGV kannst Du eine DataTable per DataBinding hängen, und dieses kannst Du per DataTable.WriteXml(PFAD) und DataTable.ReadXml(PFAD) ganz easy handeln.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!