2014-10-30 24 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 2014-10-30 14:32:00

+0

假設你已經滾動得多,所以你想要的文本跨越多行是隱藏的,現在如果你選擇那個文本並使用ScrollToCaret,那麼滾動條就停在所選文本的最後,放置關注點。 – Ahmad 2014-10-30 16:05:54

回答

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 2015-01-02 14:51:46

相關問題