`ScrollToCaret`滚动到所选文本的末尾,如何滚动到它的开头?

Ahm*_*mad 5 c# textbox visibility winforms

我通过搜索框找到文本后,我试图在文本框控件中显示所选文本.

我尝试了以下代码:

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
Run Code Online (Sandbox Code Playgroud)

ScrollToCaret方法滚动到所选文本的末尾或所选文本的最后一行.因此,如果它跨越多行并且此部分的高度大于文本框的高度,则所选文本的一部分可能保持不可见.

请注意我也无法将插入符号设置为选择开始,因为我将在所选文本上显示高亮显示.

如何确保所选文本可见,或者换句话说滚动到所选文本的第一行,同时保持其突出显示?

γηρ*_*όμε 3

[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
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (5认同)