1

我有一个继承自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在 a 上Form并设置Rtf……就是这样。那么为什么我的调整大小方法被称为荒谬的 # 次(~30 倍)?

调用堆栈

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(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x481 字节

所有的时间e.NewRectangle.HeightWidth价值都在无意义的模式中上升和下降。最终的高度和宽度不是最大值。我不太关心事件触发。如何修复此方法以计算大小而不在末尾添加空格?

请注意,Text属性的 Get 返回some words \t \n。如您所见,没有 300 个换行符或任何内容来说明空白。

4

0 回答 0