Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否更改文本框中滚动条的位置?_C#_.net_C++_Winforms_Scrollbar - Fatal编程技术网

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版本有更多的哨声。

如果我有一个非常长的像字节流一样的行怎么办?