RichTextBox pas de traitement nouveau line/caractères retour chariot
J'ai l'impression de vivre un très inhabituel problème avec le RichTextBox
de contrôle, de la programmation en C# dans Visual Studio 2008.
Je suis en train de lire le flux d'un fichier qui a été écrit par la console windows (avec redirection de la sortie), et je suis en train de lire dans mon programme (essentiellement, je suis à recréer ce qui est connu dans le monde unix, comme "queue").
Lorsqu'un tableau d'octets est lu, j'aimerais revenir à une nouvelle ligne de ligne de, et de continuer à lire. Cependant, il semble que mon SYSTÈME ne permettra pas de répondre à la ligne ou des caractères retour chariot. Par exemple, j'ai essayé en ajoutant \n
, \r\n
, et même Environment.NewLine
de la chaîne écrite, mais rien ne semble fonctionner. Il continue a écrire sur la même ligne.
Voici le code qui semble être la cause du problème:
string convertedBuffer = System.Text.Encoding.UTF8.GetString((byte[])e.UserState);
outputBox.AppendText(convertedBuffer + "\n");
Je suis vraiment à une perte, ici, quelqu'un peut-il aider?
OriginalL'auteur TGP1994 | 2011-07-10
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que vous définissez
outputBox.Multiline
valeur false à la propriété qui seront empêche le contrôle de montrer le texte multi-ligne.Edit: Vous avez déclaré au commentaire
Voici ce qui s'est passé:
La
string
classe en C# est un tableau dechar
commencer par pointeur vers le premier caractère dans le tableau et se termine par le "terminal" char\0
. Ainsi, lorsque vous appelezSystem.Text.Encoding.UTF8.GetString(buffer)
si la taille est plus grande que la taille de la chaîne, il a donné le reste des caractères de la chaîne à la borne de char en char tableau. le tableau de caractères sera quelque chose commesome text\0\0\0
, Donc je suis deviner que lorsque vous ajoutezEnvironment.NewLine
il aura le dernier indice du tableau de char après la dernière\0
et puis le char tableau serasome text\0\0\r\n
et en raison de la nouvelle ligne est après que le terminal, il va l'ignorer.Qui est impair. Je l'ai vérifié: Ajout d'un nouveau
Form
Form1
et d'y ajouter une nouvellerichTextBox1
avec ses valeurs par défaut. Maintenant, le code d'évaluer multi, ajoutez la ligne commerichTextBox1.AppendText("Testing..." + Environment.NewLine); richTextBox1.AppendText("Testing..." + Environment.NewLine);
Il fonctionnera comme prévu...Qu'en ajoutant une chaîne qui a été généré à partir du Système.Texte.L'encodage.UTF8.GetString()?
C'est le Même, Modifier le code pour
richTextBox1.AppendText(System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes("Testing...")) + Environment.NewLine);
et il s'imprime toujours les mêmes résultats attendus.Je vois.. C'est probablement parce que le reste des octets de la chaîne est positionnée à la chaîne de la valeur terminale
\0
, de Sorte que lorsque vous ajoutez une nouvelle ligne, il l'ajouter après le dernier emplacement danschar
tableau qui contient la valeur que '\0' et il reste null terminal charcter dans le char tableau après la nouvelle ligne, de sorte que la nouvelle ligne sera ignoré.. je vais mettre à jour la réponse à inclure plus d'information.OriginalL'auteur Jalal Said
Viens de mettre "\n" ou de l'Environnement.De retour à la ligne séparément comme suit:
Cela fonctionne pour moi... et vous n'avez pas à vous soucier de \0
Salut, oui j'étais en retard annonce que j'ai eu le même problème. Malheureusement l'ajout de la nouvelle ligne en collaboration avec la chaîne et cela m'a causé le problème. Une fois que je me sépare d'elle, ça fonctionne pour moi 😉
OriginalL'auteur Jakub