iga*_*gal 6 .net c# c++ scrollbar winforms
如果我想更改TextBox滚动条的位置,除此之外我还需要做什么:
SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
Run Code Online (Sandbox Code Playgroud)
此函数仅更改滚动条位置,但不更新实际TextBox(因此滚动条"滚动",但文本不会).有什么建议?我在Visual Studio 2008中使用Windows Forms和.NET 4.
我经常这样做:
textBox1.Select(textBox1.Text.Length, 0);
textBox1.ScrollToCaret();
Run Code Online (Sandbox Code Playgroud)
选择0个字符时,只需将光标移动到所需位置(在示例代码中:在文本末尾).
首先,定义一个常量值:
const int EM_LINESCROLL = 0x00B6;
Run Code Online (Sandbox Code Playgroud)
然后,声明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);
Run Code Online (Sandbox Code Playgroud)
最后,使用以下方法来做真实的事情:
SetScrollPos(myTextBox.Handle,1,myTextBox.Lines.Length-1,true);
SendMessage(myTextBox.Handle,EM_LINESCROLL,0,
myTextBox.Lines.Length-1);
Run Code Online (Sandbox Code Playgroud)
您还可以在文本框更新时使用GetScrollPos()来保存滚动位置:
[DllImport("user32.dll")]
static extern int GetScrollPos(IntPtr hWnd, int nBar);
Run Code Online (Sandbox Code Playgroud)