>  기사  >  백엔드 개발  >  C# 두 개의 richtextbox 컨트롤 스크롤 막대를 동기식으로 스크롤하는 간단한 방법을 구현하는 방법

C# 두 개의 richtextbox 컨트롤 스크롤 막대를 동기식으로 스크롤하는 간단한 방법을 구현하는 방법

黄舟
黄舟원래의
2017-05-28 10:08:181757검색

이 글에서는 두 개의 리치텍스트 상자 컨트롤 스크롤 막대의 동기식 스크롤을 실현하는 C#의 간단한 방법을 주로 소개합니다. 글의 소개는 매우 자세하며 필요한 모든 사람을 위한 특정 참조 및 학습 가치가 있습니다. .

Foreword

때로는 기사 등을 비교해야 하고 텍스트를 두 개의 richtextbox 컨트롤에 넣어야 하는 경우가 많습니다. 그러나 동시에 스크롤하고 봐야 하는 경우 더 나은 보기 효과를 얻을 수 있습니다.

물론 컨트롤을 오버로드하거나 컨트롤을 사용자 정의하는 전통적인 방법으로도 목표를 달성할 수 있지만 초보자나 이 컨트롤을 한 번만 사용하려는 사람들에게는 매우 번거로운 일입니다. 그래서 다음에는 간단하고 빠른 구현 방법인 richtextbox 스크롤 막대 동기화 기능을 제공하겠습니다.

방법은 다음과 같습니다.

먼저 winform 형식으로 두 개의 richtextbox 컨트롤을 만듭니다.

제가 자주 사용하는 두 가지 방법을 소개합니다.

첫 번째 방법은 get입니다. 현재 마우스 richtextbox 컨트롤의 줄 번호


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

두 번째 방법은 richtextbox 컨트롤의 특정 줄로 빠르게 이동하는 것입니다


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

      }
    }

이 두 가지 방법을 사용하면 스크롤 막대 동기화 기능을 구현할 수 있습니다. .

아이디어는 다음과 같습니다. 먼저 richtextbox1이 스크롤할 때 GetLineNoVscroll 메서드를 통해 richtextbox1의 마우스 해당 줄 번호를 얻습니다. 그런 다음

TrunRowsId 메소드를 사용하여 richtextbox1의 행 번호를 richtextbox2에 배치하여 richtextbox2가 richtexbox1

의 스크롤 막대와 함께 스크롤하도록 합니다.

richTextBox1의 VScroll 이벤트에 다음 코드를 추가합니다. 여기? , 특정 오프셋을 나타냅니다. 두 개의 리치 텍스트 상자는 레이아웃 이유(예: 컨트롤 크기 등)로 인해 동기화되지 않을 수 있습니다. 일반적으로 0을 쓰십시오. 차이가 너무 크면 직접 값을 조정하십시오.

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

마지막으로 두 개의 스크롤 막대가 동시에 스크롤됩니다

요약

위 내용은 C# 두 개의 richtextbox 컨트롤 스크롤 막대를 동기식으로 스크롤하는 간단한 방법을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.