在C#Visual studio中删除在网格上绘制的圆圈

问题描述 投票:0回答:1

我在表格8上绘制了一个格子,如下图所示。我写了一个类drawRules,其中我提到根据表单的输入绘制垂直和水平线。

 protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g;
        g = e.Graphics;
        Pen linePen = new Pen(System.Drawing.Color.CornflowerBlue);

        Int32 Num_of_Lines;
        Int32 gridLength;
        Int32 gridWidth;

        bool IsIntValue = Int32.TryParse(Form7.setValue2, out Num_of_Lines);
        bool IsIntValue1 = Int32.TryParse(Form7.setValue3, out gridWidth);
        bool IsIntValue2 = Int32.TryParse(Form7.setValue4, out gridLength);


       this.Size = new Size(Num_of_Lines * gridWidth, Num_of_Lines * gridLength);


        if (IsIntValue)
        {
            if (IsIntValue1)
            {
                if (IsIntValue2)
                {

                    drawRules.verticalRule vr1 = new drawRules.verticalRule(g, gridWidth, gridLength, Num_of_Lines);

                    //Draw horizontal line
                    drawRules.horizontalRule hr1 = new drawRules.horizontalRule(g, gridWidth, gridLength, Num_of_Lines);

                }
                linePen.Dispose();
                base.OnPaint(e);
            }

        }


    }

在此之后我想在点击鼠标的地方绘制圆圈,我提到了鼠标点击事件

private void Form8_MouseClick_1(object sender, MouseEventArgs e)
{
    int r1 = e.X;
    int r2 = e.Y;
    Graphics g2;
    g2 = this.CreateGraphics();
    drawRules newclass1 = new drawRules();
    newclass1.addcoordinate(r1, r2, g2);
}

addcoordinate1是drawRules类中的一个方法,它被调用来绘制圆。另外,我正在将这些坐标写入文件中

public void addcoordinate(int r1, int r2, Graphics g2)
{
    int gridWidth;
    int gridLength;
    int Num_of_Lines;
    bool IsIntValue = Int32.TryParse(Form7.setValue2, out Num_of_Lines);
    bool IsIntValue1 = Int32.TryParse(Form7.setValue3, out gridWidth);
    bool IsIntValue2 = Int32.TryParse(Form7.setValue4, out gridLength);

    Rectangle rectangle = new Rectangle();
    PaintEventArgs arg = new PaintEventArgs(g2, rectangle);
    Pen redPen1 = new Pen(Color.Red, 3);
    DrawCircle(arg, redPen1, r1, r2, 8, 8);

    System.IO.StreamWriter objWriter;
    objWriter = new System.IO.StreamWriter("test.txt", true);
    objWriter.Write(r1);
    objWriter.Write(" ");
    objWriter.Write(r2);
    objWriter.WriteLine();
    objWriter.Close();
}

public void DrawCircle(PaintEventArgs e, Pen redpen1, int x, int y, int 
    width, int height)
{          
    e.Graphics.DrawEllipse(redpen1, x - width / 2, y - height / 2, width, height);   
    redpen1.Dispose();
}

现在,我想删除该圆圈,在圆圈区域内双击鼠标。

请建议如何删除圆圈而不删除后面的网格。如果有人帮助我,我将不胜感激。

c# visual-studio
1个回答
0
投票

不要在单击Button时绘制执行的代码。保存坐标,让OnPaint方法处理它。 要删除你的cirlces,只需从列表中删除它们。

private List<Point> circleCoordinates = new List<Point>();

public Form1()
{
  InitializeComponent();
}

public void addcoordinate(int r1, int r2)
{
  this.circleCoordinates.Add(new Point(r1, r2));
}

protected override void OnPaint(PaintEventArgs e)
{
  // linedrawing goes here
  foreach (Point point in this.circleCoordinates)
  {
    e.Graphics.DrawEllipse(Pens.Black, new Rectangle(point, new Size(10, 10)));
  }

  base.OnPaint(e);
}

private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
{
  for (int i = this.circleCoordinates.Count() - 1; i >= 0; i--)
  {
    Rectangle ellipseRectangle = new Rectangle(this.circleCoordinates[i].X - 5, this.circleCoordinates[i].Y - 5, 10, 10)

    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(ellipseRectangle);

    if(path.IsVisible(e.Location))
    {
      this.circleCoordinates.RemoveAt(i);
    }
    //invalidate form to trigger repainting
    this.Invalidate();
  }
© www.soinside.com 2019 - 2024. All rights reserved.