[c#]RichTextBox verwijderd \r Carriage Return

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 19-09 12:39
Wanneer ik data via een serielle poort uitlees heeft deze een \r (Carriage Return) maar als ik dan deze waarde in een richtextbox zet dan wordt de \r omgezet in een \n een line feed dus.

De tekst wordt als volgt toegevoegd:
C#:
1
richTextBox1.AppendText("\r");


In een multiline tekstbox werkt het wel goed.
Is is hier een verklaring voor?

[ Voor 7% gewijzigd door InfoTracer op 09-06-2009 21:56 ]


Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 18-09 15:41

mOrPhie

❤️❤️❤️❤️🤍

Er was ooit een bug in VB6 met het RichTextBox control, dat een enkele CR of LF werd herschreven als CRLF in het parsen van de rtf. Dat lag uiteindelijk aan een rtf-mechanisme dat in Windows 2000 zat (toentertijd). Een update verhielp het probleem.

Of het je nu helpt weet ik niet. Ik weet niet of de .NET versie van de RichTextBox nog steeds datzelfde mechanisme gebruikt en ik neem aan dat je een up-2-date machine hebt?

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 19-09 12:39
heb het geprobeerd in visual studio 2008 pro en express editie in .net 2.0 modes en in .net 3.5 modes
Heb alles updates geïnstalleerd.

Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Ik weet niet wat je precies wilt met \r maar ik heb hier inderdaad hetzelfde.
Als je deze wel wilt laten zien echt hard in de richTextBox kan je dat zo doen:
C#:
1
richTextBox1.AppendText("\\r");

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Phyxion schreef op woensdag 10 juni 2009 @ 09:44:
Ik weet niet wat je precies wilt met \r maar ik heb hier inderdaad hetzelfde.
Als je deze wel wilt laten zien echt hard in de richTextBox kan je dat zo doen:
C#:
1
richTextBox1.AppendText("\\r");
Ik denk niet dat hij de tekst \r wil tonen, maar wil doen waar \r voor staat (een carriage return dus).

Is dit geen probleem dat optreed omdat een richtext box geen verschil maakt tussen een "harde" \r\n (of andersom, ik vergeet dat steeds) en een "zachte" return (enter / shift+enter)? Niet alles ondersteunt dit namelijk. Voor zover ik weet is in windows altijd een \n\r nodig voor een nieuwe lijn (als je er eentje doet krijg je vaak een blokje omdat het karakter niet getoond kan worden).

Kun je niet beter op de achtergrond onthouden dat het een \r betreft (en dus je ingelezen data in een variabele bewaren) in plaats van afhankelijk te zijn van de RTF? Het gebruik van scherm elementen voor (tijdelijke) data opslag is niet echt handig lijkt me.

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • Crazybest
  • Registratie: Januari 2002
  • Laatst online: 15-01-2023
Je moet inderdaad wel het escape character '\' gebruiken.

Ik weet niet of jouw richtextbox automatisch de property "multiline" op 'true' heeft staan.

[ Voor 45% gewijzigd door Crazybest op 10-06-2009 09:57 ]


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 19-09 15:19
Crazybest schreef op woensdag 10 juni 2009 @ 09:54:
Je moet inderdaad wel het escape character '\' gebruiken.
Als je de \ van \r escaped, dan knal je de tekst \r erin en niet de daadwerkelijke functionaliteit van \r.

Acties:
  • 0 Henk 'm!

  • Crazybest
  • Registratie: Januari 2002
  • Laatst online: 15-01-2023
RedHat schreef op woensdag 10 juni 2009 @ 09:56:
[...]


Als je de \ van \r escaped, dan knal je de tekst \r erin en niet de daadwerkelijke functionaliteit van \r.
mm, ja inderdaad :) escape R natuurlijk.

Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Crazybest schreef op woensdag 10 juni 2009 @ 09:54:
Je moet inderdaad wel het escape character '\' gebruiken.

Ik weet niet of jouw richtextbox automatisch de property "multiline" op 'true' heeft staan.
multiline/wordwrap maakt niks uit.

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 18-09 15:41

mOrPhie

❤️❤️❤️❤️🤍

Crazybest schreef op woensdag 10 juni 2009 @ 10:06:
[...]

mm, ja inderdaad :) escape R natuurlijk.
Wat bedoel je met "escape R"?

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 19-09 12:39
Het is wel van belang dat de \r wordt bewaard ivm het testen van de serielle apperatuur die het bericht uit stuurt.
Ik heb ook een log functie gemaakt die de berichten uit de serielle poort wegschrijven naar een .txt bestand en dit gaat wel goed.

Ik denk dat het toch te maken heeft met dat de richtextbox geen \r wil accepteren en alleen \n gebruikt voor een nieuwe lijn.

Ik zal dan ook een textbox gaan gebruiken ipv een richtextbox want deze laat wel "netjes" de \r zien. Het wordt dan een blokje en als er dan \r\n staat wordt het pas echt een nieuwe regel.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

InfoTracer schreef op woensdag 10 juni 2009 @ 13:28:
Het is wel van belang dat de \r wordt bewaard ivm het testen van de serielle apperatuur die het bericht uit stuurt.
Ik heb ook een log functie gemaakt die de berichten uit de serielle poort wegschrijven naar een .txt bestand en dit gaat wel goed.

Ik denk dat het toch te maken heeft met dat de richtextbox geen \r wil accepteren en alleen \n gebruikt voor een nieuwe lijn.

Ik zal dan ook een textbox gaan gebruiken ipv een richtextbox want deze laat wel "netjes" de \r zien. Het wordt dan een blokje en als er dan \r\n staat wordt het pas echt een nieuwe regel.
Als je een logger gaat schrijven wil ik je toch aanraden om het niet via een textbox te doen (zoals al eerder aangegeven). In de textbox kun je toch eventueel de \r vervangen door \\r (waardoor in het scherm "\r" komt te staan). Een blokje kan tenslotte diverse dingen betekenen (is namelijk om aan te geven dat er geen teken in je huidige tekenset voor is en dat slaat op meer tekens dan alleen \r).

Maar wat je naar de textfile schrijft zou ik vanuit een stringbuilder/buffer op de achtergrond doen. Je kan dan eventueel de textbox als "view" boven op die data hangen in plaats van naar een textbox te schrijven en deze uit te lezen om naar een file te zetten. Mede ook omdat de performance van de textbox uiteraard lager is dan van een stringbuilder/buffer die op de achtergrond de boel vasthoudt (de textbox moet ook renderen en dat kost wat performance zeker bij grote hoeveelheden text).

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 19-09 12:39
Het loggen zal ook niet via een textbox gaan dit schrijf ik gelijk naar een file en daarnaast nog naar het scherm.
Naar file:
C#:
1
2
byte[] msgbyte = Encoding.ASCII.GetBytes(msg);
fsRead.Write(msgbyte, 0, msgbyte.Length);


Naar scherm:
C#:
1
2
3
4
5
tbRead.Invoke(new EventHandler(delegate
{
   tbRead.AppendText(msg);
   tbRead.ScrollToCaret();
}));


Om de cr en de lf weer te geven gebruik ik deze functie:
C#:
1
2
tbRead.Text = tbRead.Text.Replace("\r", "[cr]");
tbRead.Text = tbRead.Text.Replace("\n", "[lf]");

En om terug te zeteen natuurlijk de paramters omdraaien.
Pagina: 1