0

我尝试按照以下代码在运行时更改字体大小,但我总是得到StackOverflowException.

protected override void OnResize(EventArgs e)
{
    this.bitmapDoubleBuffer = new Bitmap(base.Width, base.Height);
    this.backGraphics = Graphics.FromImage(this.bitmapDoubleBuffer);
}

public void ReDrawRuntime()
{
    SizeF sizeF = this.backGraphics.MeasureString(this.Text, this.Font);
    if (sizeF.Width > this.Size.Width)
    {
        this.Font = new Font(this.Font.Name, 20, this.Font.Style);
        sizeF = this.backGraphics.MeasureString(this.Text, this.Font);
    }
    this.backGraphics.DrawString(this.Text, 
                this.Font, 
                this.solidBrushForeColor, 
                (float)((int)width), 
                (float)((int)height));
    this.graphicsDoubleBuffer.DrawImage(this.bitmapDoubleBuffer, 0, 0);
 }
4

1 回答 1

3

导致更改字体大小会增加文本所基于的控件的大小,这将引发 Resize 事件 agin (look on this.Font =.., this !!) ,这将再次运行您的代码,这可能(根据异常)将验证为 true :

if (sizeF.Width > this.Size.Width)

条件再次等等......

所以一般规则是:不要改变内部控件的形状,OnResize在另一个地方做。

于 2013-01-17T10:21:54.160 回答