2014-05-21 24 views
3

我有一個Windows多行文本框並且是隻讀的。我可以檢查其中的文字是否已達到最後?我的目的是在文本大於TextBox容量的情況下啓用滾動。檢查文本是否超出文本框的大小

+0

不文本框中有一個'在垂直滾動條屬性auto'選項? – Stefan

+0

不是我所知。我正在使用System.Windows.Forms.TextBox – Nitish

+1

也許這會幫助:http://stackoverflow.com/questions/73110/how-can-i-show-scrollbars-on-a-system-windows-forms-textbox-只有當文本-D – Stefan

回答

5

試試這個檢查字符串寬度小於文本框寬度:

if(TextRenderer.MeasureText(txtBox.Text, txtBoxFont).Width < txtBox.Width) 
+0

我沒有在System.Windows.Forms中獲取TextRenderer – Nitish

+0

您使用哪個.net框架?嘗試添加「使用System.Drawing;」 – mrida

+0

.net Version 3.5 – Nitish

1

簡單的,不浪費您的時間的解決方案是設置垂直滾動條始終可見。如果沒有必要,它什麼都不會做。但它也不會傷害任何可見的東西。這就是基本上所有的文本編輯器,文字處理器和無數其他應用程序所做的事情。

如果你堅持計算一個滾動條是否必要,你可以這樣做,但這需要很多工作。您將使用TextRenderer.MeasureText method來確定控件顯示的文本的大小(以像素爲單位)。請務必使用允許傳入與TextBox控件的屬性相對應的字體,大小,文本格式標誌的重載。
(請注意,你希望使用Graphics.MeasureString方法,它使用GDI +,而TextBox控件使用GDI內部,所以結果會不準確。)

你會在插入代碼一個TextChanged event的處理程序,以便每次更新TextBox的內容時都會重新計算所需的大小。

哦,一旦你編寫了代碼並開始測試它,你會發現一個奇怪的錯誤。它需要您花一段時間來識別它,但我會爲您節省麻煩:您將忘記說明滾動條本身的寬度!當滾動條被隱藏時,稍微更多的文本將適合控件的客戶區域。通過允許查詢SystemInformation.VerticalScrollBarWidth property來確定滾動條的寬度來解決這個問題。

您也可能開始接受測試人員的抱怨,說該應用程序已經變得遲緩。這是有道理的 - 每當TextBox中的文本發生更改時,都要重新計算。可能會對代碼做一些小的優化,但這種解決方案的效率並不高。