无法使用 CreateGraphics 绘制

Can't draw with CreateGraphics

我只有一个面板,想在上面绘图。不使用其 Paint 事件。所以我尝试了这个但它不起作用。

private void Form1_Load(object sender, EventArgs e)
{
    Graphics g = panel1.CreateGraphics();
    g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}

如果有人能向我提供解释和示例代码,那就太好了。

您的表单在触发 Load 事件时不可见。您应该在表单可见后绘制矩形。一种解决方案是在您的表单上添加一个按钮。您可以将其命名为 drawRectangleButton。然后订阅它的点击事件并绘制。

private void drawRectangleButton_Click(object sender, EventArgs e)
{
    Graphics g = panel1.CreateGraphics();
    g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}

你用 CreateGraphicssynchronous 的方式画东西。例如,在位图中绘制并将其保存到磁盘。如果您在设计器或表单构造函数中向面板的 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 方法中,绘制所有列表矩形。