2010-09-08 4 views
1

J'écris du texte dans une zone de texte multiligne en utilisant les données du port série. Actuellement, il écrit chaque nouvelle ligne en dessous de la ligne précédente, donc éventuellement les nouvelles lignes de texte sont hors de l'écran, et l'utilisateur doit faire défiler vers le bas pour les voir. Comment puis-je changer le code afin qu'il écrit chaque nouvelle ligne ci-dessus plutôt que sous la ligne de texte précédente? Je développe le programme pour les appareils Windows Mobile 6 en utilisant C# dans VS2008. Je sais que c'est probablement une solution simple, mais je suis nouveau à C# et n'arrive pas à comprendre ce que je fais. Merci d'avance!Texte décroissant dans une zone de texte multiligne (Compact Framework, C#)

Mise à jour:

Ceci est le plus proche de ce que je voulais accomplir:

private void terminalText(object o, EventArgs e) 
    { 
     tbTerminal.Text += rawString; 
     tbTerminal.Select(tbTerminal.TextLength, 0); 
     tbTerminal.ScrollToCaret(); 
    } 

Il n'écrit pas la ligne suivante au-dessus de la ligne précédente comme je l'espérais, mais il se concentre automatiquement le dernier texte écrit afin que vous n'ayez pas à utiliser la barre de défilement pour afficher les données de port les plus récentes. J'apprécie toute votre aide!

Répondre

1

Vous pouvez toujours sélectionner le dernier caractère, puis faites défiler jusqu'à la caret, je ne suis pas trop sûr que ce soit différent du cadre compact, mais avec un contrôle de zone de texte normal:

textBox.Select(textBox.TextLength, 0); 
textBox.ScrollToCaret(); 
+0

Merci! Ce n'est pas tout à fait ce que je voulais, mais c'est définitivement une solution alternative. Très apprécié! – ninehundredt

1

Je pense que vous devriez être en mesure juste débarquez la nouvelle ligne de texte devant tout le texte précédent comme ceci:

field.Text = receivedLine + "\r\n" + field.Text 

Une autre option est d'ajouter toujours le texte à la fin et juste faire défiler le champ de texte à la fin:

 field.Text += receivedLine + "\r\n" 
     var isNotEmpty = field.TextLength > 0; 
     if (isNotEmpty) 
     { 
      field.Select(field.TextLength - 1, 0); 
      field.ScrollToCaret(); 
     } 

Ceci est correct pour une quantité raisonnable de texte qui est reçu à une fréquence raisonnable. Si vous commencez à utiliser de gros morceaux de texte ou des tonnes de mises à jour, vous devrez peut-être optimiser davantage.

+0

Vous n'avez pas besoin de la vérification de chaîne vide comme vous pouvez simplement faire ce que j'ai indiqué dans ma réponse (alias pas enlever 1) et il défilera à la fin et pas d'erreur si le champ de texte de la zone de texte est vide (car il ira à 0) – Blam

+0

Merci, @Blam, je vais voir si cela me permet de simplifier mon code. –

+0

C'est en fait ce que je comprends la question cherchait .. (la première option) – Vic

Questions connexes