2010-08-16 3 views
0

RichTextBox에서 검색 할 때 사용할 모덜리스 찾기 대화 상자를 만들었으며 발견 된 텍스트를 선택한 후 찾기 대화 상자의 위치를 ​​지정하는 데 문제가있어서 선택한 텍스트를 포함하지 못합니다. 나는 다음과 같은 사용하여 클라이언트 영역에 줄 번호 상대를 얻기 위해 노력했다 :발견 된 텍스트를 찾기 대화 상자를 어떻게 배치합니까?

this.lineCount = this.rtb.Height/(this.rtb.Font.Height+2); 

rtb.Select(rtbIndex, searchText.Length); 

int linePos = (this.rtb.GetLineFromCharIndex(this.rtb.GetFirstCharIndexOfCurrentLine())) % this.lineCount; 

if(linePos<(this.lineCount/2)) 
{ 
    this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Bottom - this.Height)); 
} 
else 
{ 
    this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Top)); 
} 

this.lineCount 글꼴 높이와를 RichTextBox의 높이에 따라 클라이언트 영역에 맞게 라인의 수입니다. 그것은 제가 확인한 정확한 가치입니다. lineNum이 this.lineCount의 값의 절반보다 작 으면 내 코드가 richtextbox의 아래쪽에 찾기 대화 상자를 배치합니다. 그렇지 않으면 상단에서

그러나, linePos는 신뢰할 수 없습니다. 선택한 텍스트의 행이 19 행이고 lineCount가 20 일 때 대화 상자가 선택된 텍스트 위로 이동하게되면 값이 0 인 경우가 있습니다. 따라서 richtextbox가 선택한 텍스트를 표시하는 위치를 안정적으로 계산할 수 없습니다. 당신은 문자 위치를 직접 계산할 필요가 없습니다

+0

GetPositionFromCharIndex 방법을 사용하여 얻을 수 있습니다. 너 뭔가 필요한거야? –

답변

1

, 당신은 당신이 좋은 답을 가지고 있지만 스레드를 종료하지 않았다

+0

하지만 RTB에서 텍스트의 시작 부분부터 절대 위치를 제공하기 때문에 선택한 텍스트를 포함하지 않도록 대화 상자의 위치를 ​​지정하는 데 도움이되지 않습니다. –

+0

@bill, 나는 네게 무슨 일이 일어나고 있는지 잘 모르겠다. 'GetPositionFromCharIndex'는 스크롤 위치에 관계없이 RTB의 좌상단을 기준으로 좌표를 반환합니다. (Win7에서 실행되는 .NET 2.0 용 VS 2010 WinForms 프로젝트를 만들어 두 번 확인했습니다.) –

관련 문제