如果我想更改TextBox
滚动条的位置,除此之外我还需要做什么:
SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
此函数仅更改滚动条位置,但不更新实际的TextBox
(因此滚动条“滚动”,但文本没有)。有什么建议?我正在使用Windows Forms和.NET 4,以及Visual Studio 2008。
答案 0 :(得分:6)
我通常会这样做:
textBox1.Select(textBox1.Text.Length, 0);
textBox1.ScrollToCaret();
选择0个字符只需将光标移动到所需位置(在示例代码中:在文本末尾)。
答案 1 :(得分:4)
首先,定义一个常量值:
const int EM_LINESCROLL = 0x00B6;
然后,声明 user32.dll 的两个外部方法:
[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar,
int nPos, bool bRedraw);
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int wMsg,
int wParam, int lParam);
最后,使用这些方法来做真实的事情:
SetScrollPos(myTextBox.Handle,1,myTextBox.Lines.Length-1,true);
SendMessage(myTextBox.Handle,EM_LINESCROLL,0,
myTextBox.Lines.Length-1);
更新文本框时,您还可以使用 GetScrollPos()进行滚动位置保存:
[DllImport("user32.dll")]
static extern int GetScrollPos(IntPtr hWnd, int nBar);
答案 2 :(得分:1)
尽量避免直接控制它,它只是不能很好地工作。设置TextBox.SelectionStart属性以确保插入符是要显示的行。然后调用ScrollToCaret。控件必须具有使其工作的重点。您的用户在找回它时不会有任何问题。
TextBox是控件的祖父的包装器,它已经23岁了,比我估计的许多SO用户还要老。当640 KB对每个人都足够时,Window 2.0必须在386SUX或更低版本上运行。 WPF版本有更多口哨。