WPF RichTextBox 에서 현재 라인번호

최근 닷넷 프로젝트를 진행중이다.
UnityContainer와 MVVM 패턴을 적용하기 위해 MVVM 패턴 학습중인데, 이전에 Spring을 이용해 Web 프로젝트를 해봐서, DI(Dependency Injection), IoC(Inversion of Control) 등 개념을 알고 있어 UnityContainer 는 대충 사용하는데, MVVM 은 Web에서 MVC와 MVP 의 차이점이 명확하게 개념이 잡히질 않는다.

어쨋든.. 오늘 블로깅할건 RichTextBox에서 당연히 라인번호를 가져올 수 있을지 알았는데 한참 뒤져도 없었다. 결국 구글링해보고 참고해서 아래 코드를 작성하였다.

/// <summary>
/// RichTextBox 의 현재 캐럿의 라인번호를 리턴한다.
/// </summary>
/// <param name="rtb"></param>
/// <returns>int</returns>
private int GetLineNumber(RichTextBox rtb)
{
        TextPointer caretLineStart = rtb.Caretposition.GetLineStartPosition(0);
        TextPointer tp = rtb.Document.ContentStart.GetLineStartPosition(0);
        int lineNumber = 1;

        if (caretlineStart.CompareTo(tp) < 0)
       {
                return lineNumber;
       }
       while (true)
       {
                int rs=0;
                tp = tp.GetLineStartPosition(1, out rs);

                if (rs == 0 || caretLineStart.CompareTo(tp) < 0) break;
               
                lineNumber++;
        }
        return lineNumber;
}

댓글

이 블로그의 인기 게시물

C#에서 포인터 사용

WPF RichTextBox 와 Document의 바인딩

WPF 이미지위에 라인 그리기(WPF DrawLine on exist Image)