Maison  >  Article  >  développement back-end  >  C# Comment implémenter une méthode simple de défilement synchrone de deux barres de défilement de contrôle richtextbox

C# Comment implémenter une méthode simple de défilement synchrone de deux barres de défilement de contrôle richtextbox

黄舟
黄舟original
2017-05-28 10:08:181757parcourir

Cet article vous présente principalement une méthode simple en C# pour réaliser le défilement synchrone de deux barres de défilement de contrôle richtextbox. L'introduction dans l'article est très détaillée et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin. regarde ci-dessous.

Préface

Parfois, nous devons implémenter des articles de comparaison, etc., et souvent placer le texte dans deux contrôles richtextbox, mais si nous en avons besoin Faites défiler et visualisez simultanément pour obtenir de meilleurs effets de visualisation.

Bien sûr, la méthode traditionnelle de surcharge des contrôles ou de personnalisation des contrôles peut atteindre l'objectif, mais elle est très gênante pour les novices ou les personnes qui souhaitent utiliser ce contrôle une seule fois. Je vais donc proposer ensuite une méthode simple et rapide à mettre en œuvre : la fonction de synchronisation de la barre de défilement richtextbox.

La méthode est la suivante :

Tout d'abord, nous créons deux contrôles richtextbox dans le formulaire winform

Deux méthodes sont présentées ci-dessous. J'utilise souvent

La première méthode consiste à obtenir le numéro de ligne dans le contrôle richtextbox où se trouve la souris actuelle


private int GetLineNoVscroll(RichTextBox rtb)
    {
      //获得当前坐标信息
      Point p = rtb.Location;
      int crntFirstIndex = rtb.GetCharIndexFromPosition(p);
      int crntFirstLine = rtb.GetLineFromCharIndex(crntFirstIndex);
      return crntFirstLine;
    }

La deuxième méthode consiste à accéder rapidement à une certaine ligne dans le contrôle richtextbox


private void TrunRowsId(int iCodeRowsID, RichTextBox rtb)
    {
      try
      {
        rtb.SelectionStart = rtb.GetFirstCharIndexFromLine(iCodeRowsID);
        rtb.SelectionLength = 0;
        rtb.ScrollToCaret();
      }
      catch
      {

      }
    }

Avec ces deux méthodes, nous pouvons La fonction de synchronisation de la barre de défilement est réalisée.

L'idée est la suivante : tout d'abord, lorsque richtextbox1 défile, obtenez le numéro de ligne correspondant à la souris de richtextbox1 via la méthode GetLineNoVscroll. Ensuite

localise le numéro de ligne de richtexbox1 obtenu dans richtextbox2 via la méthode TrunRowsId, de sorte que richtextbox2 défile avec la barre de défilement richtexbox1

dans l'événement VScroll de richTextBox1 Add ; le code suivant, attention, j'ai un ? , représente un certain décalage. Les deux zones de texte riches peuvent être désynchronisées pour des raisons de mise en page (telles que la taille du contrôle, etc.)

En général, écrivez simplement 0. Si la différence est trop grande, ajustez la valeur. par vous-même.


     private void richTextBox1_VScroll(object sender, EventArgs e)
     {
      int crntLastLine= GetLineNoVscroll(richTextBox1, panel1)-?;
       TrunRowsId(crntLastLine, richTextBox2);
     }

Enfin, les deux barres de défilement défilent de manière synchrone

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn