我有一个面板,想在上面画画。而不使用其Paint事件。所以我尝试了这个,但它不起作用。
private void Form1_Load(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}
如果有人能给我提供解释和示例代码,那就太好了。
您使用CreateGraphics
以synchronous
的方式绘制某些东西。例如,绘制位图并将其保存到磁盘。可能是一个更好的方法,如果你添加一个事件处理程序到面板的Paint
事件,在设计器或表单构造器:
panel1.Paint += this.OnPanel1_Paint;
并在事件中绘制:
private void OnPanel1_Paint(object sender, PaintEventArgs e)
{
var g = e.Graphics;
g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}
你不需要在这里处理这些图形,只画你想要的。
这样,当您需要强制重绘时(例如,您在面板中的每次点击上添加另一个矩形),您必须调用panel1.Invalidate();
。此方法告诉Windows您需要重新绘制控件,并且Windows会尽快调用该事件。显然,你需要知道该画什么,这取决于你的应用程序。你可以有一个List
的矩形,并在每次点击时添加一个新的矩形。然后,在OnPanel1_Paint
方法中,您绘制所有列表矩形。