簡體   English   中英

如何在PictureBox C#中繪制對象?

[英]How to draw object in PictureBox c#?

我試圖通過單擊鼠標在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); 

是的,您正在繪制圖片框。 當下一個繪制消息到達時,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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM