【问题标题】:How to erase rectangle drawn in paint event from picture box? c#如何从图片框中删除在绘画事件中绘制的矩形? C#
【发布时间】:2018-12-06 05:00:29
【问题描述】:

我知道对此有很多问题,但我无法让它发挥作用。我有这个活动:

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{ 
    e.Graphics.DrawRectangle(new Pen(selectionBrush, 1), selectionRectangle);
}

它可以正常工作。在我放在图片框内的图像上绘制一个彩色矩形。但是在我画了那个矩形之后,我想把它擦掉。我基本上将它用作裁剪图像的选择区域。有没有办法可以擦除我绘制的矩形?谢谢。

这里是我要擦除矩形的地方:

private void button1_Click(object sender, EventArgs e)
    {
        //here are some examples of what I have tried
        pictureBox1.Invalidate();
        Invalidate();
    }

【问题讨论】:

  • 设置标志是否绘制?
  • this.Invalidate() ? Graphics.Clear ?你想“保留”形状吗?为了澄清我的问题 - 您想要绘制矩形,然后立即将其清除?你想完成什么?
  • 如果我们能更好地理解这里的总体目标是什么、您想要做什么以及为什么这是“解决方案”的一部分,这将会有所帮助。
  • 您的绘画程序调用了DrawRectangle。然后你使矩形无效。此时,您的绘制例程将再次被调用,并且,如果您绘制矩形的代码仍然存在,它将被重新绘制。您需要这样做,以便在您不再需要它时不再调用 DrawRectangle 调用(使用 if 语句或其他东西)。您可能还希望将失效矩形的大小在四周扩大一个像素,以确保您不会留下任何面包屑

标签: c#


【解决方案1】:

您的Paint 例程调用了DrawRectangle。然后你使矩形无效。此时,您的绘制例程将再次被调用,并且,如果您绘制矩形的代码仍然存在,它将被重新绘制。您需要这样做,以便在您不再需要它时不再调用 DrawRectangle 调用(使用 if 语句或其他东西)。

您可能还想将失效矩形的大小扩大一个像素,以确保您不会留下任何面包屑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多