캐럿이 마지막 행의 위치인지 여부를 richtext 상자에서 확인하려고합니다. 이것이 가능한가?wpf richtextbox 캐럿이 마지막 행에 있는지 확인하거나 행의 개수를 확인하십시오.
참고 : 마지막으로 추가 한 행 수 : miscrosoft 포럼에 캐럿이 어떤 줄인지 감지 할 수있는 예제가 있기 때문입니다.
감사합니다.
캐럿이 마지막 행의 위치인지 여부를 richtext 상자에서 확인하려고합니다. 이것이 가능한가?wpf richtextbox 캐럿이 마지막 행에 있는지 확인하거나 행의 개수를 확인하십시오.
참고 : 마지막으로 추가 한 행 수 : miscrosoft 포럼에 캐럿이 어떤 줄인지 감지 할 수있는 예제가 있기 때문입니다.
감사합니다.
해결책을 찾았습니다. 어쩌면 간단한 방법이있다, 그렇다면 알려 주시기 바랍니다
private void OnHasRtbReachedEnd(System.Windows.Controls.RichTextBox rtb)
{
TextPointer pointer1 = rtb.CaretPosition;
int iCurrentLine = GetLineNumber(rtb);
rtb.CaretPosition = rtb.Document.ContentEnd;
int iLastLine = GetLineNumber(rtb);
if (iCurrentLine == iLastLine)
{
if (!_bIsRtbMovingUpDown)
MoveToNextDataGridRow();
_bIsRtbMovingUpDown= false;
}
else
{
_bIsRtbMovingUpDown= true;
}
rtb.CaretPosition = pointer1;
}
//이 코드는 http://social.msdn.microsoft.com/Forums/en/wpf/thread/667b5d2a-84c3-4bc0-a6c0-33f9933db07f // 에서
private int GetLineNumber(System.Windows.Controls.RichTextBox rtb)
{
TextPointer caretLineStart = rtb.CaretPosition.GetLineStartPosition(0);
TextPointer p = rtb.Document.ContentStart.GetLineStartPosition(0);
int caretLineNumber = 1;
while (true)
{
if (caretLineStart.CompareTo(p) < 0)
{
break;
}
int result;
p = p.GetLineStartPosition(1, out result);
if (result == 0)
{
break;
}
caretLineNumber++;
}
return caretLineNumber;
}
은 MSDN 링크
http://social.msdn.microsoft.com/Forums/en/wpf/thread/667b5d2a-84c3-4bc0-a6c0-33f9933db07f
을 확인하시기 바랍니다 온다정말로 캐럿의 줄 번호를 알고 싶다면 다음과 같은 것을 할 수 있습니다 (아마도 몇 가지 필요합니다.) 왕) :
TextPointer caretLineStart = rtb.CaretPosition.GetLineStartPosition(0);
TextPointer p = rtb.Document.ContentStart.GetLineStartPosition(0);
int caretLineNumber = 1;
while (true)
{
if (caretLineStart.CompareTo(p) < 0)
{
break;
}
int result;
p = p.GetLineStartPosition(1, out result);
if (result == 0)
{
break;
}
caretLineNumber++;
}
코드는 라인의 수를 얻을 :
Int32 CountDisplayedLines(RichTextBox rtb)
{
Int32 result = -1;
rtb.CaretPosition = rtb.Document.ContentStart;
while (rtb.CaretPosition.GetLineStartPosition(++result) != null)
{
}
return result;
}
위대한, 그것은 작동합니다. –
나는 코드를 시도하고 항상 정확한 결과를 제공하지 않습니다. 그것을 할 수 한 현명한 방법이
int previousCursorPosition;
private void RichTarget_KeyDown_1(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up || e.Key == Key.Down)
{
Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender;
previousCursorPosition = rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart);
}
}
private void RichTextBox_KeyUp_1(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up)
{
Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender;
if (previousCursorPosition == rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart))
{
//do your staff
}
}
else if (e.Key == Key.Down)
{
Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender;
if (previousCursorPosition == rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart))
{
//do your staff
}
}
}
안녕 키 쇼어입니다 감사합니다! 내가 찾은 해결책을 게시하고있었습니다! :) – okidoki
해당 링크에서 솔루션을 얻었습니다 –
상황 (빈 줄)에 대해 caretLineStart.CompareTo (p) <0을 caretLineStart.CompareTo (p) <= 0으로 변경하십시오. –