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付けてForm設定しRtfます...これですべてです。では、なぜ私のサイズ変更メソッドがばかげた回数(〜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(ref System.Windows.Forms.Message m = {System.Windows.Forms.Message})+0x481バイト

その間e.NewRectangle.HeightWidth値は無意味なパターンで上下します。最終的な高さと幅は最大値ではありません。イベントの発砲についてはあまり気にしません。この方法を修正して、末尾に空白を追加せずにサイズを計算するにはどうすればよいですか?

TextGetofプロパティはを返すことに注意してくださいsome words \t \n。ご覧のとおり、空白を説明するための300の改行などはありません。

4

0 に答える 0