private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e) { var richTextBox = (RichTextBox)sender; // richTextBox.Width = e.NewRectangle.Width; int lineheight = richTextBox.Font.Height; int nHeight = lineheight; if (e.NewRectangle.Height < lineheight) nHeight = lineheight; else nHeight = e.NewRectangle.Height+ lineheight; richTextBox.Height = nHeight; }
网上找了好多办法,就这个最省事和简单,参考https://stackoverflow.com/questions/11906932/size-richtextbox-according-to-contents
Have you looked at the ContentsResized
event? Add the following method to be called when the event fires:
private void richTextBox_ContentsResized(object sender, ContentsResizedEventArgs e) { var richTextBox = (RichTextBox) sender; richTextBox.Width = e.NewRectangle.Width; richTextBox.Height = e.NewRectangle.Height; }
When the RTF content is changed (using Rtf
), the RichTextBox
should be resized to match its contents. Make sure you also set the WordWrap
property to false
.
I've tried it with your table example and it does appear to work (albeit with a little offset, which you could possibly solve by adding a few pixels of width to the adjusted size - not sure why that happens):
P.Brian.Mackey EDIT
This answer worked for me. To clarify, here's the final code including border fix:
public static void Main() { string sInput = "hi\t bye\t\n";// one\t two\t\n"; SIZE CharSize; Form form = new Form(); RichTextBox rtfBox = new RichTextBox(); rtfBox.ContentsResized += (object sender, ContentsResizedEventArgs e) => { var richTextBox = (RichTextBox)sender; richTextBox.Width = e.NewRectangle.Width; richTextBox.Height = e.NewRectangle.Height; rtfBox.Width += rtfBox.Margin.Horizontal + SystemInformation.HorizontalResizeBorderThickness; }; rtfBox.WordWrap = false; rtfBox.ScrollBars = RichTextBoxScrollBars.None; rtfBox.Rtf = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Arial;}}\viewkind4\uc1\trowd\trgaph100\cellx1000\cellx2000\pard\intbl\lang1033\f0\fs20 hi\cell bye\cell\row\intbl one\cell two\cell\row\pard\par}"; form.Controls.Add(rtfBox); form.ShowDialog(); }