2009-11-20 108 views
10

我有一個包含RichTextBox的Winforms應用程序。Winforms RichTextBox:如何確定有多少行文字可見?

如何確定當前顯示的文本行數?

原因:我想將插入符滾動到RichTextBox的中間位置。我可以使用RichTextBox.ScrollToCaret(),但將插入符號放在RichTextBox的頂部。我想,如果我知道顯示了多少行,我可以將插入符號「後退」n/2行,然後調用ScrollToCaret(),然後恢復原始插入符的位置。

編輯:

我發現EM_GETLINECOUNT,我認爲是答案,除了醫生說:的EM_GETLINECOUNT信息檢索當​​前可見的文本行總數,不只是行數。

Tantalizingly,也有EM_GETFIRSTVISIBLELINE,它獲得第一個可見行,但我找不到GETLASTVISIBLELINE。 ??


相關:
How can I scroll the caret to the middle of the RichTextBox?

+0

只是有興趣 - 你將如何處理這些信息?你意識到這可能是可變的,因爲你可以在整個文本中有不同的字體和填充。 – 2009-11-20 22:43:14

+0

它進入構建自定義RTB,顯示行號:http://stackoverflow.com/questions/2567263/how-to-show-number-of-a-line-in-a-richtextbox-c/2668264#2668264 – Cheeso 2010-04-20 14:32:45

回答

16

那麼,這是不是很漂亮,但它爲我工作。基本上,我正在檢查richtextbox左上角的一個點,以及文本框左下角的一個點。您可能需要根據您的richtextbox顯示方式來調整點座標。然後我得到最接近這兩個點的字符索引,並檢索它所在的行。

Dim topIndex As Integer = RichTextBox1.GetCharIndexFromPosition(New Point(1, 1)) 
Dim bottomIndex As Integer = RichTextBox1.GetCharIndexFromPosition(New Point(1, RichTextBox1.Height - 1)) 

Dim topLine As Integer = RichTextBox1.GetLineFromCharIndex(topIndex) 
Dim bottomLine As Integer = RichTextBox1.GetLineFromCharIndex(bottomIndex) 

Dim numLinesDisplayed As Integer = bottomLine - topLine 

我測試了它的richtextboxes顯示多種字體大小,它似乎工作。如果最後一行顯示的文本在其下面有很多空白並且下一行幾乎準備好顯示,我懷疑返回的答案將被關閉(太小)一行。如果你有一個很高的richtextbox,有很多行,這應該不成問題。

+1

完美運作。謝謝。 – Cheeso 2009-11-21 01:20:22

+0

輝煌。非常感謝你。 – Larry 2011-10-17 13:15:48

0

要顯示的行數即一個RichTextBox能夠顯示的,即使沒有文字有目前,嘗試:

​​

這使用在當前的「A」的測試信的高度字體以像素爲單位查找行高度。

相關問題