我有很长的文字并把它放到TextBox中。我想自动显示文本的开头而不是结尾。但TextBox会自动显示文本的结尾。
我能做些什么来实现它。
我使用SelectionStart方法将光标放在TextBox中文本的开头,以便实现一些简单的IntelliSense,因此首选解决方案不会使用移动光标的方法。
答案 0 :(得分:2)
您最初可以在文本框中放置一个较小的值,然后根据您显示全文的条件附加全文的剩余部分。
示例:
textBox.text = someString.Substring(0, x);
然后在需要时做
textBox.AppendText(someString.Substring(x+1));
答案 1 :(得分:1)
我假设您使用的是WinForms。
更新:奇怪。如果在表单构造函数中执行,则下面的删除代码将按所描述的方式工作,但不会在表单生命周期中执行(例如按钮单击处理程序)。
请注意,如果您已经使用SelectionStart将光标放在文本的开头(例如,通过textBox.SelectionStart = 0;
),则所有需要遵循的内容都是textBox.ScrollToCaret();
。
在文本框中添加文本而不是 textBox.AppendText(someLongString)
时,请考虑使用textBox.Text = someLongString
方法。
如果您必须在分配新文本之前清除当前文字,请使用 textBox.Text = string.Empty;
,然后拨打textBox.AppendText()
;
答案 2 :(得分:1)
当没有输入焦点时,您可以使用所有者绘制来覆盖文本框的渲染。这可以让你完全控制它显示的内容,而不会破坏文本框的任何实际编辑功能。
答案 3 :(得分:1)
您可以通过P / Invoke将Win32滚动消息发送到基础文本框句柄:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
// From User32.dll
private const int WM_VSCROLL = 277;
private const int SB_TOP = 6;
SendMessage(yourTextBox.Handle, WM_VSCROLL, (IntPtr)SB_TOP, IntPtr.Zero);