我在VB.NET Winforms上有一个RichTextBox,我希望它以Liberation Mono 10pt字体显示(说)12行文本。我当然可以手动调整它的大小,但是我想根据字体大小和行数以编程方式调整它的大小。我苦苦挣扎的事情是如何计算单行的高度。我试过了:
RichTextBox.Height = RichTextBox.Font.Height
和:
RichTextBox.Height = RichTextBox.Font.GetHeight
但是似乎都没有给我我想要的确切尺寸。有没有一种方法可以测量RTB中线条的确切高度?
谢谢@Arman,我最终做到了这一点:
Public Function GetHeightOfFirstNumLines(ByVal RTB As RichTextBox, ByVal NumLines As Integer) As Integer
Dim Position1 = RTB.GetPositionFromCharIndex(RTB.GetFirstCharIndexFromLine(0))
Dim Position2 = RTB.GetPositionFromCharIndex(RTB.GetFirstCharIndexFromLine(NumLines))
Return Position2.Y - Position1.Y
End Function
然后在Form.Load事件中,此代码:
Dim RTBSize As New Size(TextRenderer.MeasureText("M", MemoryRtb.Font, MemoryRtb.Size, TextFormatFlags.WordBreak))
MemoryRtb.ClientSize = New Size(MemoryRtb.ClientSize.Width, (RTBSize.Height * 11) + 5)
线条的高度可以不同,因此您可以执行以下操作:
Private Shared Function GetHeightOfFirstLines(ByVal Rtb As RichTextBox, ByVal NumLines As Integer) As Integer
Dim p1 = Rtb.GetPositionFromCharIndex(Rtb.GetFirstCharIndexFromLine(0))
Dim p2 = Rtb.GetPositionFromCharIndex(Rtb.GetFirstCharIndexFromLine(NumLines))
Return p2.Y - p1.Y
End Function
然后
RichTextBox1.ClientSize = New Size(RichTextBox1.ClientSize.Width, GetHeightOfFirstLines(RichTextBox1, 10))
但是,这要求您在文本框中已经有10行文本。如果不这样做,则可以获取第一行的高度,并假设以后的十行将具有相同的高度:
RichTextBox1.ClientSize = New Size(RichTextBox1.ClientSize.Width, GetHeightOfFirstLines(RichTextBox1, 1) * 10)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句