Функция перетаскивания с рисованием прямоугольника C # .net - формы - PullRequest
1 голос
/ 15 марта 2011

Я хочу перетащить то, что нарисовал на формах. Вот мой код для рисования прямоугольника. Это прекрасно работает.

        Rectangle rec = new Rectangle(0, 0, 0, 0);

        public Form1()
        {
            InitializeComponent();
            this.DoubleBuffered = true;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.Aquamarine, rec);
        }
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                rec = new Rectangle(e.X, e.Y, 0, 0);
                Invalidate();
            }
        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                rec.Width = e.X - rec.X;
                rec.Height = e.Y - rec.Y;
                Invalidate();
            }
        }

Теперь я хочу перетащить этот прямоугольник в другое место.

Просьба помочь Как это сделать

Спасибо

Йоан

1 Ответ

2 голосов
/ 15 марта 2011

Я написал вспомогательный класс для такого рода вещей:

class ControlMover
{
    public enum Direction
    {
        Any,
        Horizontal,
        Vertical
    }

    public static void Init(Control control)
    {
        Init(control, Direction.Any);
    }

    public static void Init(Control control, Direction direction)
    {
        Init(control, control, direction);
    }

    public static void Init(Control control, Control container, Direction direction)
    {
        bool Dragging = false;
        Point DragStart = Point.Empty;
        control.MouseDown += delegate(object sender, MouseEventArgs e)
        {
            Dragging = true;
            DragStart = new Point(e.X, e.Y);
            control.Capture = true;
        };
        control.MouseUp += delegate(object sender, MouseEventArgs e)
        {
            Dragging = false;
            control.Capture = false;
        };
        control.MouseMove += delegate(object sender, MouseEventArgs e)
        {
            if (Dragging)
            {
                if (direction != Direction.Vertical)
                    container.Left = Math.Max(0, e.X + container.Left - DragStart.X);
                if (direction != Direction.Horizontal)
                    container.Top = Math.Max(0, e.Y + container.Top - DragStart.Y);
            }
        };
    }
}  

Затем я просто инициализирую его в событии загрузки формы с моим управлением:

ControlMover.Init(myControl, myContainer, ControlMover.Direction.Any);  

Ну, выне имеет контроля, чтобы двигаться.Это прямоугольник.Но, надеюсь, вы поймете идею.
ОБНОВЛЕНИЕ: Вы проверили соответствующие вопросы, перечисленные на этой странице?Попробуйте:
Перетащите прямоугольник в C #

...