如果我想换一个TextBox
的滚动条的位置,我需要什么,除了这事:更改TextBox中的滚动条位置?
SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
此功能只改变滚动条的位置,但它不会更新实际TextBox
(所以滚动条“滚动”,但文字不)。有什么建议么?我使用Windows窗体和.NET 4,与Visual Studio 2008
如果我想换一个TextBox
的滚动条的位置,我需要什么,除了这事:更改TextBox中的滚动条位置?
SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
此功能只改变滚动条的位置,但它不会更新实际TextBox
(所以滚动条“滚动”,但文字不)。有什么建议么?我使用Windows窗体和.NET 4,与Visual Studio 2008
首先,定义一个恒定值:
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);
我通常做的:
textBox1.Select(textBox1.Text.Length, 0);
textBox1.ScrollToCaret();
,其中,选择0字符只是将光标移动到所需的位置(在示例代码中:在文本的末尾)。
尽量避免直接控制它,它只是不能很好地工作。设置TextBox.SelectionStart属性以确保插入符号是要显示的行。然后调用ScrollToCaret。控制必须有重点来完成这项工作。你的用户不会有任何麻烦找回来。
TextBox是控件的大爸爸的包装,它已经23岁了,比我认为的许多SO用户都要老。当640 KB足够用于每个人,并且Window 2.0必须在386SUX或更低的频率上运行时。 WPF版本有更多的口哨声。
如果我有像字节流一样的真正长行,该怎么办? – igal 2010-12-20 22:06:06