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イベントが開始されます(これを見てthis.Font =..ください!!)。これにより、コードが再度実行され、おそらく(例外に従って)trueと検証されます。 :

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

再びコンディションなど...

したがって、一般的なルールは次のとおりです。内部のコントロールの形状を変更しないOnResizeでください。別の場所で変更してください。

于 2013-01-17T10:21:54.160 に答える