如何在PictureBox中绘制对象
本文关键字:绘制 对象 PictureBox | 更新日期: 2023-09-27 18:17:29
我试着用鼠标点击在PictureBox中画一个矩形:
private void MyPictureBoxMouseClick(object sender, MouseEventArgs e)
{
using (Graphics g = MyPictureBox.CreateGraphics())
{
var pen = new Pen(Color.Black, 2);
g.DrawRectangle(pen, e.X, e.Y, 50, 50);
pen.Dispose();
}
}
矩形正在绘制。但是当我将鼠标移动到图片框之外时,所有的矩形都消失了。如何避免呢?
我添加了一个Paint事件:
private List<Rectangle> Rectangles { set; get; }
private void MyPictureBoxPaint(object sender, PaintEventArgs e)
{
using (Graphics g = MyPictureBox.CreateGraphics())
{
var pen = new Pen(Color.Black, 2);
foreach (var rect in Rectangles)
{
g.DrawRectangle(pen, rect);
}
pen.Dispose();
}
}
private void MyPictureBoxMouseClick(object sender, MouseEventArgs e)
{
Rectangles.Add(new Rectangle(e.X, e.Y, 50, 50));
MyPictureBox.Refresh();
}
但现在矩形没有绘制。
哦,是我的错。
g.DrawRectangle(pen, rect); -> e.Graphics.DrawRectangle(pen, rect);
是的,你正在画在图片框上。当下一个绘制消息到达时,picturebox将重新绘制自己,届时它将覆盖您的矩形。
你要么需要在Paint
事件中画它,以使你的矩形存活下来,要么你可以在PictureBox.Image
上画它,这样它就会留在那里。
对于您的编辑:您需要使用e.Graphics
属性。例如,下面的代码为我工作。
private void MyPictureBoxPaint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
using (var pen = new Pen(Color.Black, 2))
{
foreach (var rect in Rectangles)
{
g.DrawRectangle(pen, rect);
}
}
}