Comment puis-je faire défiler jusqu'à un numéro de ligne spécifié d'un contrôle RichTextBox à l'aide de C#? C'est la version de WinForms.Comment puis-je faire défiler jusqu'à un numéro de ligne spécifié d'un contrôle RichTextBox à l'aide de C#?
Répondre
Vous pouvez essayer quelque chose comme ça.
void ScrollToLine(int lineNumber)
{
if (lineNumber > richTextBox1.Lines.Count()) return;
richTextBox1.SelectionStart = richTextBox1.Find(richTextBox1.Lines[lineNumber]);
richTextBox1.ScrollToCaret();
}
Cela ne fonctionnera pas parfaitement si vous avez beaucoup de répétitions dans votre RichTextBox. J'espère que cela vous sera peut-être utile.
Merci, c'est exactement ce dont nous avons besoin. –
Cela me semble dangereux. Lorsque la ligne désirée apparaît plus d'une fois, votre code sautera toujours à la première occupation. – boboes
Je ne sais pas, si elle a une méthode pour cela, mais que diriez-vous compter les sauts de ligne dans le Text
puis définissez le caret (via SelectionStart
et SelectionLength
) et ScrollToCaret()
?
Cela aiderait-il dans cette situation à diviser le texte? Par exemple:
string[] lines = myRichTextBox.Text.Split('\n');
int linesCount = lines.Length;
Cela vous indiquera le nombre de lignes.
Hey @TeenMrDragon. Cette question a été posée il y a quelques années et, comme vous pouvez le voir, elle a une réponse acceptée. Votre réponse n'aide pas vraiment l'affiche originale puisque le message original demande comment faire défiler jusqu'à une ligne spécifique. Jetez un autre coup d'oeil pour voir si vous pouvez trouver une meilleure solution. Je suis downvoting pour l'instant mais je vais upvote si vous pouvez répondre à la question. Envoyez-moi un commentaire ici quand vous l'aurez édité et je vais jeter un coup d'oeil. – mttdbrd
Avec ce code, le curseur passe à la première colonne de la ligne voulue.
Cela fonctionne parfaitement dans tous les cas.
void GotoLine(int wantedLine_zero_based) // int wantedLine_zero_based = wanted line number; 1st line = 0
{
int index = this.RichTextbox.GetFirstCharIndexFromLine(wantedLine_zero_based);
this.RichTextbox.Select(index, 0);
}
Quel rtb? WinForms ou WPF? –
@Henk: C'est Winforms. –
Je crois que vous pouvez faire avec Win32 API. Voir http://www.codeproject.com/KB/vb/VbNetScrolling.aspx Pour le faire avec C#, vous devrez implémenter la procédure de fenêtre pour le contrôle RichTextBox: http://msdn.microsoft.com/fr us/library/system.windows.forms.richtextbox.wndproc.aspx –