我对如何绘制自定义 Windows 窗体控件的理解是首先调用
Graphics.Clear
刷新控件的背景,然后在其上绘制您想要的任何内容。 因此,我正在开发的自定义控件具有以下代码:
internal class PictureSizeCropBox : Control {
protected override void OnPaint(PaintEventArgs ea) {
ea.Graphics.Clear(Color.Green);
Pen redPen = new(Color.Red, 1);
ea.Graphics.DrawRectangle(redPen, new Rectangle(0, 0, Width - 1, Height - 1));
}
}
但是,当我将其放入
Panel
中并且我的代码在调整窗口大小时调整控件(和面板)的大小时,当窗口变大时,我会得到以下图形效果:
Graphics.Clear
在做什么? 它最初绘制绿色背景,但奇怪的是,它实际上并没有清除控件渲染的旧内容。 绘制 Windows 窗体控件以便它们在调整大小时正确重绘并清除旧渲染的正确方法是什么? 我是否需要为背景绘制一个填充矩形,如果是这样,Graphics.Clear
中的要点是什么以及何时应该使用它?
显然,您需要显式地使调整大小的控件无效:
protected override void OnResize(EventArgs ea) {
base.OnResize(ea);
Invalidate();
}
添加此功能可以解决问题。