2010-09-13 74 views
1

我有很長的文本並將其放入文本框。我想自動顯示文本的開始而不是結束。但是TextBox自動顯示我的文本結束。如何自動顯示文本框中的文本開頭

我能做些什麼來實現它。

我使用SelectionStart方法將光標置於文本框的文本開頭,以便實現一些簡單的智能感知,因此首選解決方案不會使用移動光標的方法。

回答

1

我假設你使用WinForms。


更新:奇怪。如果在窗體構造函數中執行,但在窗體生命週期中未執行(例如,按鈕單擊處理程序),則下面展開的代碼將按照描述進行描述。

請注意,如果你已經使用SelectionStart把光標移動到文本的開頭(例如,通過textBox.SelectionStart = 0;),那麼所有需要遵循的是textBox.ScrollToCaret();


考慮添加文本到文本框,而不是 textBox.Text = someLongString時使用 textBox.AppendText(someLongString)方法。

如果您在分配新文本之前必須清除當前文本,請使用 textBox.Text = string.Empty;,然後撥打 textBox.AppendText();

+0

它的工作原理一樣textBox.Text – Darqer 2010-09-13 19:42:08

+0

@Darqer - 果然。有趣的是,它按照表單構造函數的描述工作。我已經用替代方案更新了我的帖子。 – kbrimington 2010-09-13 20:35:10

2

你總是可以初步建成一個較小的值在文本框中,然後在你的標準顯示全文追加全文的剩餘部分。

例子:

textBox.text = someString.Substring(0, x); 

然後在需要時做

textBox.AppendText(someString.Substring(x+1)); 
1

你可以使用所有者繪製覆蓋文本的渲染時,它不具有輸入焦點。這會讓你完全控制它顯示的內容,而不會破壞文本框的任何實際編輯功能。

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); 
相關問題