1
Answer

Moving picturebox with Mouse

Ask a question
albert albert

albert albert

13y
5.3k
1
Hi Everyone,

I have this:

[code]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace DrawingFigureWithMouse
{
    public partial class Form1 : Form
    {
        private Point[] vertices = {new Point(50,100), new  Point(100,50), new Point(150,100)};
        private GraphicsPath p = new GraphicsPath();
        private Region region;
        private int oldX = 100;
        private int oldY = 75;
        private int x = 0;
        private int y = 0;
        private PictureBox circle = new PictureBox();
        private Bitmap circleShape = new Bitmap(Properties.Resources.circle);
        private Point _offset = Point.Empty;
        private bool inside = false;
        private bool drag  = false;



        public Form1()
        {
            InitializeComponent();
            Size = new Size(400,400);
            Text = "Moving shape with mouse";
            BackColor = Color.White;
            p.AddPolygon(vertices);
            region = new Region(p);
            circle.Size = new Size(200, 200);
            circle.Visible = true;
            circle.Location = new Point(40 + circle.Width, 150);
            circle.Image = Properties.Resources.circle;
            circle.MouseDown += new MouseEventHandler(circle_MouseDown);
            circle.MouseUp += new MouseEventHandler(circle_MouseUp);
            circle.MouseMove +=new MouseEventHandler(circle_MouseMove);
            Controls.Add(circle);
        }       

        private void circle_MouseDown(object sender, MouseEventArgs e)
        {
            drag = true;
            x = e.X;
            y = e.Y;
        }

        private void circle_MouseUp(object sender, MouseEventArgs e)
        {
            _offset = Point.Empty;
            //drag = false;           
        }

        private void circle_MouseMove(object sender, MouseEventArgs e)
        {
            /*
            if (_offset != Point.Empty)
            {
                Point newLocation = this.Location;
                circle.Left += e.X - x;
                circle.Top += e.Y - y;               
            }
             */
           
            if (drag)
            {
                circle.Left += e.X -x;
                circle.Top += e.Y -y;
                x = e.X;
                y = e.Y;
                Invalidate();
            }
             
        }

        protected override void  OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.FillRegion(Brushes.Blue,region);

             base.OnPaint(e);
        }

        protected override void  OnMouseDown(MouseEventArgs e)
        {
            if(region.GetBounds(CreateGraphics()).Contains(e.X, e.Y))
            {
                oldX = e.X;
                oldY = e.Y;

                //pictureBox1.Width = e.X;
               // pictureBox1.Height = e.Y;
                inside = true;               
            }
             base.OnMouseDown(e);
        }//End method

        protected override void OnMouseUp(MouseEventArgs e)
        {
            if (inside)
            {
                region = region.Clone();
                region.Translate(e.X - oldX, e.Y - oldY);
                oldX = e.X;
                oldY = e.Y;
                inside = false;
                Invalidate();
            }
            base.OnMouseUp(e);
        }     

    }
}
[/code]

I try to move the green circle with the mouse but there is a lot of flickering.

THX for helping!!

Answers (1)