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;
}
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;
}
댓글
댓글 쓰기