Ошибка с Pen C#

Я сделал систему, чтобы выбрать область с помощью мыши. Тем не менее, когда я выбираю область выглядит следующим образом:

http://i.imgur.com/xxc0ayn.png

Извините за мой английский, я бразилец...

Мой код:

    private void ResizeSelection()
    {

        if (CurrentAction == ClickAction.LeftSizing)
        {

            if (Cursor.Position.X < CurrentBottomRight.X - 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentTopLeft.X = Cursor.Position.X;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }

        }
        if (CurrentAction == ClickAction.TopLeftSizing)
        {

            if (Cursor.Position.X < CurrentBottomRight.X - 10 && Cursor.Position.Y < CurrentBottomRight.Y - 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentTopLeft.X = Cursor.Position.X;
                CurrentTopLeft.Y = Cursor.Position.Y;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }
        }
        if (CurrentAction == ClickAction.BottomLeftSizing)
        {

            if (Cursor.Position.X < CurrentBottomRight.X - 10 && Cursor.Position.Y > CurrentTopLeft.Y + 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentTopLeft.X = Cursor.Position.X;
                CurrentBottomRight.Y = Cursor.Position.Y;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }

        }
        if (CurrentAction == ClickAction.RightSizing)
        {

            if (Cursor.Position.X > CurrentTopLeft.X + 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentBottomRight.X = Cursor.Position.X;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }
        }
        if (CurrentAction == ClickAction.TopRightSizing)
        {

            if (Cursor.Position.X > CurrentTopLeft.X + 10 && Cursor.Position.Y < CurrentBottomRight.Y - 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentBottomRight.X = Cursor.Position.X;
                CurrentTopLeft.Y = Cursor.Position.Y;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }
        }
        if (CurrentAction == ClickAction.BottomRightSizing)
        {

            if (Cursor.Position.X > CurrentTopLeft.X + 10 && Cursor.Position.Y > CurrentTopLeft.Y + 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentBottomRight.X = Cursor.Position.X;
                CurrentBottomRight.Y = Cursor.Position.Y;
                RectangleWidth = CurrentBottomRight.X - CurrentTopLeft.X;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }
        }
        if (CurrentAction == ClickAction.TopSizing)
        {

            if (Cursor.Position.Y < CurrentBottomRight.Y - 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentTopLeft.Y = Cursor.Position.Y;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }
        }
        if (CurrentAction == ClickAction.BottomSizing)
        {

            if (Cursor.Position.Y > CurrentTopLeft.Y + 10)
            {

                //Erase the previous rectangle
                g.DrawRectangle(EraserPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);
                CurrentBottomRight.Y = Cursor.Position.Y;
                RectangleHeight = CurrentBottomRight.Y - CurrentTopLeft.Y;
                g.DrawRectangle(MyPen, CurrentTopLeft.X, CurrentTopLeft.Y, RectangleWidth, RectangleHeight);

            }

        }

    }

Интересно, есть ли способ исправить это или сделать его прозрачным, показывая только край прямоугольника. Спасибо,

1 ответ

Решение

Вы неправильно используете Graphics,

Вы никогда не должны звонить CreateGraphics() рисовать на контроле; это будет стерто на следующей краске.

Вместо этого вы должны обрабатывать Paint событие и нарисуйте все, что вам нужно на каждом перекрашивании.

Когда мышь двигается, позвоните Invalidate() заставить его перекрасить.

Другие вопросы по тегам