我有很長的文本並將其放入文本框。我想自動顯示文本的開始而不是結束。但是TextBox自動顯示我的文本結束。如何自動顯示文本框中的文本開頭
我能做些什麼來實現它。
我使用SelectionStart方法將光標置於文本框的文本開頭,以便實現一些簡單的智能感知,因此首選解決方案不會使用移動光標的方法。
我有很長的文本並將其放入文本框。我想自動顯示文本的開始而不是結束。但是TextBox自動顯示我的文本結束。如何自動顯示文本框中的文本開頭
我能做些什麼來實現它。
我使用SelectionStart方法將光標置於文本框的文本開頭,以便實現一些簡單的智能感知,因此首選解決方案不會使用移動光標的方法。
我假設你使用WinForms。
更新:奇怪。如果在窗體構造函數中執行,但在窗體生命週期中未執行(例如,按鈕單擊處理程序),則下面展開的代碼將按照描述進行描述。
請注意,如果你已經使用SelectionStart把光標移動到文本的開頭(例如,通過textBox.SelectionStart = 0;
),那麼所有需要遵循的是textBox.ScrollToCaret();
。
考慮添加文本到文本框,而不是
textBox.Text = someLongString
時使用
textBox.AppendText(someLongString)
方法。
如果您在分配新文本之前必須清除當前文本,請使用
textBox.Text = string.Empty;
,然後撥打
textBox.AppendText()
;
你總是可以初步建成一個較小的值在文本框中,然後在你的標準顯示全文追加全文的剩餘部分。
例子:
textBox.text = someString.Substring(0, x);
然後在需要時做
textBox.AppendText(someString.Substring(x+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);
它的工作原理一樣textBox.Text – Darqer 2010-09-13 19:42:08
@Darqer - 果然。有趣的是,它按照表單構造函數的描述工作。我已經用替代方案更新了我的帖子。 – kbrimington 2010-09-13 20:35:10