AutoSize RichTextBox会产生很大的空白区域

时间:2012-08-30 13:59:37

标签: c# winforms richtextbox rtf

我有一个继承自RichTextBox的班级。我重写了重新调整大小的

    protected override void OnContentsResized(ContentsResizedEventArgs e)
    {            
        this.Width = e.NewRectangle.Width;
        this.Height = e.NewRectangle.Height;
        this.Width += this.Margin.Horizontal + SystemInformation.HorizontalResizeBorderThickness;/*+ SystemInformation.HorizontalScrollBarThumbWidth Use if ScrollBars are visible */

        base.OnContentsResized(e);
    }

这有效......有点儿。这种方法在底部创建了大量的空白区域(大约2 *个实际内容)。从[External Code]多次调用此方法。这是一个基本的单元测试,我将RichTextBox放在Form并设置Rtf ......这就是所有。那么为什么我的resize方法被称为荒谬的#次(~30x)?

调用堆栈

BHCS.ECC.dll!PhysDoc.Plugins.BayRichTextBox.OnContentsResized(System.Windows.Forms.ContentsResizedEventArgs e = {System.Windows.Forms.ContentsResizedEventArgs}) Line 74 + 0x42 bytes   C#
[External Code] 
BHCS.ECC.dll!PhysDoc.Plugins.BayRichTextBox.OnContentsResized(System.Windows.Forms.ContentsResizedEventArgs e = {System.Windows.Forms.ContentsResizedEventArgs}) Line 74 + 0x42 bytes   C#
[External Code] 
BHCS.ECC.dll!PhysDoc.Plugins.BayRichTextBox.OnContentsResized(System.Windows.Forms.ContentsResizedEventArgs e = {System.Windows.Forms.ContentsResizedEventArgs}) Line 74 + 0x42 bytes   C#
[External Code] 
BHCS.ECC.dll!PhysDoc.Plugins.BayRichTextBox.OnContentsResized(System.Windows.Forms.ContentsResizedEventArgs e = {System.Windows.Forms.ContentsResizedEventArgs}) Line 74 + 0x42 bytes   C#
[External Code] 
BHCS.ECC.UnitTests.dll!BHCS.ECC.UnitTests.LibUI_Tests.RTFTests.RtfTestClass.ProductionLabTest() Line 63 + 0x2c bytes    C#
[External Code] 

当我显示外部代码时,很多事情正在发生。外部代码中先前对堆栈的调用是

  

System.Windows.Forms.dll中!System.Windows.Forms.RichTextBox.WmReflectNotify(参照   System.Windows.Forms.Message m = {System.Windows.Forms.Message})+   0x481字节

所有e.NewRectangle.HeightWidth值都会以无意义的方式上下移动。最终的高度和宽度不是最大值。我不太关心事件的发射。如何在不向末尾添加空格的情况下修复此方法来计算大小?

请注意,Get Text属性返回some words \t \n。正如您所看到的,白色空间没有300个换行符或任何内容。

0 个答案:

没有答案