C# 是否更改文本框中滚动条的位置?
如果我想更改C# 是否更改文本框中滚动条的位置?,c#,.net,c++,winforms,scrollbar,C#,.net,C++,Winforms,Scrollbar,如果我想更改文本框滚动条的位置,除此之外,我还需要做什么: SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); 此函数仅更改滚动条位置,但不更新实际的文本框(因此滚动条“滚动”,但文本不会)。有什么建议吗?我在Visual Studio 2008中使用Windows窗体和.NET 4。首先,定义一个常量值: const int EM_LINESCROLL = 0x00B6; 然后,声明user32.dll的两个外部方法:
文本框
滚动条的位置,除此之外,我还需要做什么:
SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
此函数仅更改滚动条位置,但不更新实际的
文本框
(因此滚动条“滚动”,但文本不会)。有什么建议吗?我在Visual Studio 2008中使用Windows窗体和.NET 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);
我通常会:
textBox1.Select(textBox1.Text.Length, 0);
textBox1.ScrollToCaret();
如果选择0个字符,则只会将光标移动到所需位置(在示例代码中:在文本末尾)。请尝试避免直接控制此位置,因为这样做效果不太好。设置TextBox.SelectionStart属性以确保插入符号是要显示的行。然后打电话给ScrollToCaret。控件必须具有使其工作的焦点。您的用户将很容易找到它
TextBox是控件老爹的包装器,它已经有23年的历史了,比我估计的许多用户都要老。当时640KB的内存对每个人都足够了,Windows2.0必须在386SUX或更低版本上运行。WPF版本有更多的哨声。如果我有一个非常长的像字节流一样的行怎么办?