我可以删除我绘制的旧矩形并绘制新矩形吗?

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
        Graphics g = this.panel1.CreateGraphics();
        Pen pen = new Pen(Color.Black, 2);

        g.DrawRectangle(pen, 100,100, 100, 200);
        g.dispose();
}

没有正确的解决方案

其他提示

没有,你不能“删除”那已经绘制的东西。你可以的覆盖的是别的东西,但Graphics绘制对象就像在现实生活画:一旦油漆干燥,可以只画在它与另一种颜色,你不能“擦除“它。

您也许不应该绘制响应鼠标点击的东西,无论是。这是最好的只有的借鉴的东西响应Paint事件。我会做什么在这种情况下是添加Rectangle结构上的鼠标点击列表,然后打电话panel1.Invalidate()要求它重绘自身。然后在该面板的Paint事件,执行绘图那里。

这将一举两得,因为你将能够“擦除”的东西,只需从东西绘制列表中删除它们。

这通常是通过保持你想要绘制对象的集合来完成。鼠标点击要更新这个集合,然后告诉窗口(或影响的区域)进行刷新。这有保留,如果窗口移出屏幕所绘制什么,隐藏在其他窗口后面,最小化等方面的巨大优势。

有关一个基本的溶液中,创建从一个共同的抽象形状类派生的可绘制的形状的类型,和使用,例如的层次结构,用于收集一个列表。基础形状类将有一个抽象Draw方法,所述派生类覆盖。

有关的更工业强度溶液,东张西望2-d的场景图。

人们可以使用该Graphics.Save()Graphics.Restore(state)方法。例如:

private void SaveRestore2(PaintEventArgs e)
{
    // Translate transformation matrix.
    e.Graphics.TranslateTransform(100, 0);

    // Save translated graphics state.
    GraphicsState transState = e.Graphics.Save();

    // Reset transformation matrix to identity and fill rectangle.
    e.Graphics.ResetTransform();
    e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);

    // Restore graphics state to translated state and fill second

    // rectangle.
    e.Graphics.Restore(transState);
    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 100, 100);
}

http://msdn.microsoft.com/ EN-US /库/ system.drawing.graphics.restore.aspx

此外,根据不同的应用程序,你可以看看使用DrawReversibleFrame。可以通过调用偏移方法改变矩形位置。

而不是调用g.DrawRectangle(笔,100,100,100,200)的; ,保持该矩形为将由所述图形对象被绘制的对象。每次将更新用一个新和图形对象此矩形对象将吸引新的。

在刷新应清除旧矩形和图形将以此为新的。

您可以只使用VisualBasic中的PowerPack,它是随我的版本的Visual Studio 2008

下面是一个示例代码,将绘制一个矩形在一个文本框,即我给它一个定义边框

    Dim x = TextBox1.Location.X
    Dim y = TextBox1.Location.Y
    Dim width = TextBox1.Width
    Dim height = TextBox1.Height
    Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
    Me.Controls.Add(ShapeContainer1)
    Dim RectangleShape1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape
    ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {RectangleShape1})
    RectangleShape1.Location = New System.Drawing.Point(x - 1, y - 1)
    RectangleShape1.Size = New System.Drawing.Size(width + 1, height + 1)
    RectangleShape1.BorderColor = Color.MistyRose
    ShapeContainer1.Refresh()

代码是自描述,但如果你有任何问题,只是留言...

我认为使用 绘制可逆框架 是正确的解决方案。第一个调用绘制矩形,第二个调用取消绘制矩形,依此类推。

这是一个示例代码,单击按钮将使矩形出现/消失。

Rectangle pRect = new Rectangle(10, 10, 20, 20);
private void rect_Click(object sender, EventArgs e)
{
  ControlPaint.DrawReversibleFrame(pRect, this.BackColor, FrameStyle.Thick);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top