2014-10-30 1 views
5

검색 상자를 통해 텍스트를 찾은 후 텍스트 상자 컨트롤에서 선택한 텍스트를 표시하려고합니다. 선택한 텍스트 나 선택한 텍스트의 마지막 줄의 끝`ScrollToCaret`은 선택된 텍스트의 끝까지 스크롤합니다, 어떻게 그것의 처음으로 스크롤 할 수 있습니까?

String searchText = "multiple lines of text."; 
int position = textBox.Text.IndexOf(searchText); 
textBox.SelectionStart = position; 
textBox.SelectionLength = searchText.Length; 
textBox.ScrollToCaret(); // caret is at the end of the selected text 

ScrollToCaret 방법 스크롤 :

나는 다음 코드를 시도했다. 따라서 여러 줄에 걸쳐 있고이 부분의 높이가 텍스트 상자의 높이보다 크면 선택한 텍스트의 일부가 보이지 않을 수 있습니다.

내가 선택한 텍스트에 강조 표시가 풀리기 때문에 선택 시작 부분에도 캐럿을 설정할 수 없습니다.

선택한 텍스트를 볼 수있게하려면 어떻게해야합니까? 아니면 강조 표시된 상태에서 선택한 텍스트의 첫 번째 줄로 스크롤 할 수 있습니까?

+0

여기서 전체 선택을 확인할 수 없습니다. – TaW

+0

여러 줄로 뻗어있는 의도 한 텍스트가 숨겨져 있으므로 텍스트를 선택하고 ScrollToCaret을 사용하면 스크롤바가 선택된 텍스트의 끝 부분에 멈추고 걱정되는 부분이 멈추도록 스크롤을 많이 내렸다고 가정 해 보겠습니다. – Ahmad

답변

1
[DllImport("user32.dll")] 
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);  

int numLines = textBox1.GetLineFromCharIndex(textBox1.SelectionStart); 
//scroll to top 
SendMessage(textBox1.Handle, 0x115, 6, 0); //WM_VSCROLL 
//scroll numLines 
SendMessage(textBox1.Handle, 0xB6, 0, numLines); //EM_LINESCROLL 
+3

이 코드 단편은 질문을 해결할 수 있지만 [설명 포함] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)은 게시물의 품질을 향상시키는 데 정말로 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. – gunr2171