【问题标题】:How to draw object in PictureBox c#?如何在 PictureBox c# 中绘制对象?
【发布时间】:2014-08-11 16:32:55
【问题描述】:

我尝试通过鼠标点击在 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();
        }
    }

并且正在绘制矩形。但是当我将鼠标移到 PictureBox 之外时,所有矩形都消失了。如何避免?

更新
我添加了一个 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); 

【问题讨论】:

  • 您能否更具体地了解消失的矩形?
  • 您需要将您的图元存储在一个列表中,然后从列表中绘制到图片框。目前,它们在图片框的下一次重绘时会丢失。
  • 您是否尝试挂接到Draw 事件?我认为你需要在那里这样做;)
  • 当您编辑您的问题时,请通过评论通知回答者,否则他们不会看到您的问题已更新。

标签: c# winforms picturebox


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多