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

时间:2014-10-30 13:08:13

标签: c# winforms textbox visibility

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

我尝试了以下代码:

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方法滚动到所选文本的末尾或所选文本的最后一行。因此,如果它跨越多行并且此部分的高度大于文本框的高度,则所选文本的一部分可能保持不可见。

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我遇到了同样的问题... ScrollToCaret之后,文本框滚动到末尾。问题在于,在我的代码开始运行之前,默认情况下所有文本都是选中的,因此SelectionLength有点大,在调用ScrollToCaret之前我没有重置它。在调用ScrollToCaret之前,请确保将SelectionStart和SelectionLenth都设置为所需的值(在我的情况下,我将SelectionLength设置为0)。

并确保您的文本框集中且可见(根据MS文档)。