WPF Richtextbox Environment.NewLine)

  • WPF

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    WPF Richtextbox Environment.NewLine)

    Hallo,

    Wenn ich in meiner Richtextbox in WPF in die nächste Zeile wechseln möchte, nachdem ich einen String angefügt habe:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target + Environment.NewLine)


    schaut es in der RTB dann so aus, dass mehrere Leerzeilen eingefügt werden. In diversen Foren finde ich für C#, dass man dies auch so machen könnte:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target + "\r")


    und dann entsprechend wirklich nur in die nächste Zeile gewechselt wird.

    Das Problem ist aber, dass dies nicht funktioniert und stattdessen der Text mit jeweils \r dazwischen aneinandergereiht wird.

    Habe ich da etwas übersehen?

    Edit:

    Ok, wenn ich in der XAML Paragraph Margin auf 0 setze, ist der Abstand mit Environment.NewLine viel geringer. Aber an sich noch kein wirklicher Zeilenumbruch, der direkt an den anderen Text anschließt. (ist ja auch ein Absatz …)

    VB.NET-Quellcode

    1. <RichTextBox>
    2. <RichTextBox.Resources>
    3. <Style TargetType="{x:Type Paragraph}">
    4. <Setter Property="Margin" Value="0"/>
    5. </Style>
    6. </RichTextBox.Resources>
    7. </RichTextBox>


    gibt es keine Möglichkeit einfach nur in die nächste Zeile zu wechseln?

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Translating-IT“ ()

    Translating-IT schrieb:

    dass man dies auch so machen könnte
    Genau das ist der RTF-Standard.
    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!
    das heißt, es gibt keine andere Möglichkeit als Margin auf 0 zu setzen? An sich steht Newline ja für \r\n, warum kann ich nicht einfach ein \r einfügen?
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Kannste doch - ich hab nix dagegen (und dein Computer sicher auch nicht).

    Allerdings muss ich zugeben, dass ich überhaupt nicht verstehe, was du in post#1 schreibst:

    Translating-IT schrieb:

    In diversen Foren finde ich für C#, dass man dies auch so machen könnte:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target + "\r")

    und dann entsprechend wirklich nur in die nächste Zeile gewechselt wird.
    Das Problem ist aber, dass dies nicht funktioniert und stattdessen der Text mit jeweils \r dazwischen aneinandergereiht wird.
    Zunächstmal: Wenn du in einem c#-Forum auf Vb.net-Code triffst, darfst du ruhig ein bischen misstrauisch sein.
    Dann musst du drauf achten, dass die Leute dort auch über die Wpf-Richtextbox reden, und nicht etwa über die WinForms-Richtextbox.

    Ja, und "funktioniert nicht" funktioniert bei mir nicht. :P
    Was funktioniert nicht?
    Was ist Ausgangslage?
    was ist ausgeführter Code?
    was ist Ergebnis?
    was ist gewünschtes Ergebnis?
    @ErfinderDesRades Ja, das ist mir klar. ;) Und darauf habe ich geachtet. Da war explizit von WPF die Rede.

    Kannste doch - ich hab nix dagegen (und dein Computer sicher auch nicht).


    ich meinte, so, dass es auch funktioniert, wie geplant.

    Allerdings muss ich zugeben, dass ich überhaupt nicht verstehe, was du in post#1 schreibst:


    Gewünschtes Ergebnis:

    Zeile 1
    Zeile 2

    Mit rtb_targettext.AppendText(str_target + Environment.NewLine):

    Zeile 1


    Zeile 2


    mit Margin auf 0 gesetzt:

    Zeile 1

    Zeile 2

    Mit rtb_targettext.AppendText(str_target + "\r"):

    Zeile 1/rZeile 2
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Ja, also das hier: rtb_targettext.AppendText(str_target + "\r") ist c# (nur dass das ; fehlt). Bei denen ticken die Strings ein bischen anders als in vb.net.

    In vb.net ist ein Carriage-Return umständlicher zu formulieren - die richtige Übersetzung nach vb.net ginge so:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target & Microsoft.VisualBasic.ControlChars.CR)
    Ob das Ergebnis deinen Wünschen entspricht weissichnich.

    Translating-IT schrieb:

    warum kann ich nicht einfach ein \r einfügen?
    Genau das wäre der Standard. :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!
    Danke @ErfinderDesRades,

    Das schaut schon viel besser aus. Es gibt zwar noch einen Abstand zwischen den Zeilen, aber nicht mehr so groß, dass er stört.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    ErfinderDesRades schrieb:



    In vb.net ist ein Carriage-Return umständlicher zu formulieren - die richtige Übersetzung nach vb.net ginge so:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target & Microsoft.VisualBasic.ControlChars.CR)



    Ich meine mich erinnern zu können (als ich noch selbst VB.NEt als Standard hatte), dass man auch sowas wie:

    VB.NET-Quellcode

    1. ​rtb_targettext.AppendText(str_target & vbCrLf)


    schreiben kann. Das ist dann noch kürzer.

    PadreSperanza schrieb:


    Ich meine mich erinnern zu können (als ich noch selbst VB.NEt als Standard hatte), dass man auch sowas wie:

    VB.NET-Quellcode

    1. ​rtb_targettext.AppendText(str_target & vbCrLf)


    schreiben kann. Das ist dann noch kürzer.


    Ja, das funktioniert auch.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    oh - da hätte ich eine wichtige Empfehlung für euch zwei (also falls PadreSperanza nochmal in vb.net was machen will): Visual Studio - Empfohlene Einstellungen
    Ihr habt offsichtlich die schauderliche vb6-Grütze noch in euren vb.net-Projekten.
    Damit ist vb.net aber nicht die objektorientierte Sprache, die es eigentlich ist.

    Es gibt allerdings die Möglichkeit, das von mir gezeigte kürzer zu formulieren - dazu empfehle ich einen GeneralImport auf Microsoft.VisualBasic.ControlChars - dann kann man formulieren:

    VB.NET-Quellcode

    1. rtb_targettext.AppendText(str_target & CR)
    ohne dass man den vb6-Müll inkludiert hat.
    Aber kümmer(t) dich(euch) erstmal um die empfohlenen Einstellungen.

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

    Danke @ErfinderDesRades

    Das mit VisualBasic kannte ich noch nicht, hab ich nun rausgeschmissen. Der Rest war eh, wie es soll.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.