我尝试在运行时更改字体大小,如下面的代码,但我总是得到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);
}
答案 0 :(得分:3)
原因是更改字体大小会增加文本drwn上控件的大小,这将会重新调整事件agin(查看this.Font =..
,这!!),这将运行你的再次编码,概率(根据例外)将验证为true:
if (sizeF.Width > this.Size.Width)
再次出现条件等......
所以一般规则是:不要在OnResize
内更改控件的形状,在其他地方执行。