将WinForms RichTextBox自动调整到其内容

mrt*_*ndi 11 richtextbox autosize winforms

有谁知道如何动态地将RichTextBox控件调整为其内容?

小智 10

我想我太迟了但是看看这个

这只是两个代码行:

private void rtb_ContentsResized(object sender, ContentsResizedEventArgs e)
{
    ((RichTextBox)sender).Height = e.NewRectangle.Height + 5;
}
Run Code Online (Sandbox Code Playgroud)


Luk*_*rth 8

再假设一个固定的字体,你可以这样做:

using (Graphics g = CreateGraphics())
{
    richTextBox.Height = (int)g.MeasureString(richTextBox.Text,
        richTextBox.Font, richTextBox.Width).Height;
}
Run Code Online (Sandbox Code Playgroud)


jea*_*ean 4

这是一种痛苦 - C# RichTextBox 使用起来常常令人沮丧。您是否正在尝试将框设置得足够大以容纳其内容而无需任何滚动条?

如果 RichTextBox 具有恒定字体,则可以使用 TextRenderer.MeasureText 来简单地测量所需的大小,并传入框的宽度作为约束。

ContentsResized 事件为您提供一个 ContentsResizedEventsArgs,它为您提供一个 NewRectangle,告诉您文本区域有多大。但它仅在文本更改时触发,如果您只想测量现有的 Richtextbox,则它没有那么有用(尽管您可能只是做一些黑客操作,例如将框的文本设置为自身,触发此事件)。

还有一堆 Win32 api 调用,例如使用 EM_GETLINECOUNT ( http://ryanfarley.com/blog/archive/2004/04/07/511.aspx ) 等。