如何在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中绘制对象

是的,你正在画在图片框上。当下一个绘制消息到达时,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);
        }
    }
}