Moving a control by dragging it with the mouse in C#

后端 未结 3 1966
南旧
南旧 2020-12-08 16:47

I\'m trying to move the control named pictureBox1 by dragging it around. The problem is, when it moves, it keeps moving from a location to another location around the mouse,

相关标签:
3条回答
  • 2020-12-08 17:17

    try this to move pictureBox control at runtime using mouse

     private void pictureBox7_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    xPos = e.X;
                    yPos = e.Y;
                }
            }
    
            private void pictureBox7_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                PictureBox p = sender as PictureBox;
    
                if (p != null)
                {
                    if (e.Button == MouseButtons.Left)
                    {
                        p.Top += (e.Y - yPos);
                        p.Left += (e.X - xPos);
                    }
                }
    
            }
    
    0 讨论(0)
  • 2020-12-08 17:20

    All you need:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
    
        private Point MouseDownLocation;
    
    
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                MouseDownLocation = e.Location;
            }
        }
    
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                pictureBox1.Left = e.X + pictureBox1.Left - MouseDownLocation.X;
                pictureBox1.Top = e.Y + pictureBox1.Top - MouseDownLocation.Y;
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-08 17:24

    You can also use the extension:

    public static class CmponentsExtensions
    {
      //Management of mouse drag and drop
        #region Menu and Mouse
        private static bool mouseDown;
        private static Point lastLocation;
    
        /// <summary>
        /// To enable control to be moved around with mouse
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="control"></param>
        public static void moveItselfWithMouse<T>(this T control) where T: Control
        { 
            control.MouseDown += (o, e)=> { mouseDown = true; lastLocation = e.Location; };
            control.MouseMove += (o, e) => 
            {
                if (mouseDown)
                {
                    control.Location = new Point((control.Location.X - lastLocation.X) + e.X, (control.Location.Y - lastLocation.Y) + e.Y);
                    control.Update();
                }
            };
            control.MouseUp += (o, e) => { mouseDown = false; } ;
        }
    
    
        public static void moveOtherWithMouse<T>(this T control, Control movedObject) where T : Control
        {
            control.MouseDown += (o, e) => { mouseDown = true; lastLocation = e.Location; };
            control.MouseMove += (o, e) =>
            {
                if (mouseDown)
                { 
                    movedObject.Location = new Point((movedObject.Location.X - lastLocation.X) + e.X, (movedObject.Location.Y - lastLocation.Y) + e.Y);
                    movedObject.Update();
                }
            };
            control.MouseUp += (o, e) => { mouseDown = false; };
        }
    
        #endregion
    }
    

    Then you need to use it with some control:

    In this case pictureBox1 moved the whole Form

    pictureBox1.moveOtherWithMouse(this);
    

    In this case you move only pictureBox:

    pictureBox1.moveItselfWithMouse();
    
    0 讨论(0)
提交回复
热议问题