6
votes

Comment puis-je faire défiler jusqu'à un numéro de ligne spécifié d'une commande RichTextBox à l'aide de C #?

Comment puis-je faire défiler jusqu'à un numéro de ligne spécifié d'une commande RichTextBox à l'aide de C #? C'est la version WinForms.


1 commentaires

Je crois que vous pouvez faire avec l'API Win32. Voir codeProject.com/kb/vb/vbnetscrolling.aspx pour le faire avec C #, vous devrez implémenter la procédure de fenêtre pour la commande RichTextBox: msdn.microsoft.com/en-us/library/...


4 Réponses :


1
votes

Je ne suis pas sûr, s'il y a une méthode pour cela, mais que diriez-vous de compter les chevreufs dans le texte , puis définissez le caret (via SelectionStart et < Code> SélectionLength ) et ScrollTocaret () ?


0 commentaires

12
votes

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();
    }


3 commentaires

Merci, c'est exactement ce qui est nécessaire.


Cela me semble dangereux. Lorsque la ligne souhaitée survient plus d'une fois, votre code va toujours passer à la première occurrence.


Pour un texte long, cela ne fonctionne pas car il va bien la première ligne qui a le même texte.



-2
votes

Cela aiderait-il dans cette situation à scinder le texte? Par exemple:

chaîne [] lignes = myrichTextbox.text.split ('\ n');
Int lignesCount = lignes.Longueur;

Cela vous indiquera le nombre de lignes.


1 commentaires

Hey @teenmrragon. Cette question a été posée il y a quelques années et comme vous pouvez le constater, a une réponse acceptée. Votre réponse n'assiste pas tout à fait l'affiche originale puisque le message d'origine demande comment faire défiler une ligne spécifiée. Prenez un autre look pour voir si vous pouvez trouver une meilleure solution. Je descends pour le moment, mais je vais uppoter si vous pouvez répondre à la question. Envoyez-moi un commentaire ici quand vous l'avez édité et je vais jeter un oeil.



6
votes

avec ce code, le curseur saute à la première colonne de la ligne recherchée.

Cela fonctionne parfaitement dans tous les cas strong>, même lorsque la ligne souhaitée survient plusieurs fois. P>

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);
    this.RichTextbox.ScrollToCaret();
}


1 commentaires

Excellent travail passé des heures à essayer de comprendre cela. Celui-ci a travaillé pour mes besoins. Merci