Change scrollbar position in TextBox?
如果我想更改
1 | SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); |
此功能仅更改滚动条的位置,但不会更新实际的
我通常这样做:
1 2 | textBox1.Select(textBox1.Text.Length, 0); textBox1.ScrollToCaret(); |
在这里选择0个字符只会将光标移动到所需位置(在示例代码中:文本的末尾)。
首先,定义一个常量值:
1 | const int EM_LINESCROLL = 0x00B6; |
然后,声明user32.dll的两个外部方法:
1 2 3 4 5 6 | [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); |
最后,使用以下方法做真实的事情:
1 2 3 | SetScrollPos(myTextBox.Handle,1,myTextBox.Lines.Length-1,true); SendMessage(myTextBox.Handle,EM_LINESCROLL,0, myTextBox.Lines.Length-1); |
当文本框更新时,您也可以使用GetScrollPos()来保存滚动位置:
1 2 | [DllImport("user32.dll")] static extern int GetScrollPos(IntPtr hWnd, int nBar); |
请尝试避免直接控制此操作,否则效果确实不佳。设置TextBox.SelectionStart属性,以确保插入符号是您要使其可见的行。然后调用ScrollToCaret。控件必须具有重点才能完成这项工作。您的用户可以轻松找到它。
TextBox是控件祖父的package器,它已经23岁了,比我认为的许多SO用户都要老。当640 KB对每个人来说都是足够的,而Window 2.0必须在386SUX或更少的操作系统上运行时。 WPF版本具有更多的口哨声。