как использовать метод invalidate для удаления нарисованного на форме объекта без удаления из списка - PullRequest
0 голосов
/ 23 марта 2019

У меня есть форма окна, которая позволит пользователю рисовать фигуры (например, круг, квадрат или треугольник). пользователь сможет выделить любую из фигур и будет иметь возможность переместить выделенную фигуру в коде мне удается это сделать, но проблема в том, что в методе перерисовки я не могу очистить старую фигуру, которую пользователь должен переместить, если я не удаляю все вместе пытался использовать недействительным, но не знаю, его механизм и как он работает любой совет, чтобы иметь возможность сохранить формы, которые не выделены, и только удалить выделенный, а затем перерисовать его как показано в коде, который отвечает только за перемещение элемента, спасибо

private void moveItem(int x)
    {
        SolidBrush redBrush = new SolidBrush(Color.Red);
        GraphicsPath myPath = new GraphicsPath();
        if (isMove)
        {
           // isMove = false;
            //bool isHighlighted = false;
            for (int i = 0; i < shapes.Count; i++)
            {
                Graphics g = this.CreateGraphics();
                Pen blackpen = new Pen(Color.Black);
                if (shapes[i].Selected)
                {
                    if (shapes[i].ShapeType == (int)ShapeTypes.Square)
                    {
                        //this.Invalidate();
                        shapes[i].keyPt = new Point(shapes[i].keyPt.X + x, shapes[i].keyPt.Y);
                        shapes[i].oppPt = new Point(shapes[i].oppPt.X + x, shapes[i].oppPt.Y);
                        //shapes[i].ShapeType = (int)ShapeTypes.Square;
                        //shapes[i].Selected = true;    
                        g.Clear(Color.White);
                        ((Square)shapes[i]).draw(g, blackpen);
                        ((Square)shapes[i]).fillSquare(g, redBrush);
                        //add the square to the shapes list
                        //shapes.Add(aSquare);
                    }
                    else if (shapes[i].ShapeType == (int)ShapeTypes.Circle)
                    {
                        shapes[i].keyPt = new Point(shapes[i].keyPt.X + x, shapes[i].keyPt.Y);
                        shapes[i].oppPt = new Point(shapes[i].oppPt.X + x, shapes[i].oppPt.Y);
                        g.Clear(Color.White);
                        ((Circle)shapes[i]).draw(g, blackpen);
                        ((Circle)shapes[i]).fillCircle(g, redBrush);
                    }

                    else if (shapes[i].ShapeType == (int)ShapeTypes.Triangle)
                    {
                        shapes[i].keyPt = new Point(shapes[i].keyPt.X + x, shapes[i].keyPt.Y);
                        shapes[i].oppPt = new Point(shapes[i].oppPt.X + x, shapes[i].oppPt.Y);
                        g.Clear(Color.White);
                        ((Triangle)shapes[i]).draw(g, blackpen);
                        ((Triangle)shapes[i]).fillTriangle(g, redBrush);
                    }
                }

            }
        }
    }
...