无法使用 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);
}
你用 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
方法中,绘制所有列表矩形。
我只有一个面板,想在上面绘图。不使用其 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);
}
你用 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
方法中,绘制所有列表矩形。