How do I make mousedrag inside Panel move form window?

后端 未结 5 919
陌清茗
陌清茗 2021-02-08 19:34

I have this System.Windows.Forms.Panel that I want to enable so that if the user click and drags the mouse drags the window around to.

Can I do this? Do i have to implem

相关标签:
5条回答
  • 2021-02-08 20:12

    You can achieve it by using the MouseMove Event of the panel

    Example should be something like this (Sorry have not tested it)

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            this.Location = new Point(Cursor.Position.X + e.X , Cursor.Position.Y + e.Y);
        }
    }
    
    0 讨论(0)
  • 2021-02-08 20:18

    Currently Set For A Panel. VS C# Just Messing About Seems to work for me as I wanted Sets application left-top corner to mouse position while left-click is pressed.

     public form1()
        {
            InitializeComponent();
            this.panel2.MouseMove += new MouseEventHandler(panel2_MouseMove);
        }
        
        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HT_CAPTION = 0x2;
    
        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
        
        private void panel2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                
                Point loc1 = MousePosition;
                this.Location = loc1;
            }
        }
    
    0 讨论(0)
  • 2021-02-08 20:21

    The Solution that works best for me is using unmanaged code, which gives you smooth window movements unlike the answer posted by HatSoft.

    3 small steps to drag your window on Panel movement

    using System.Runtime.InteropServices;
    

    add these six lines inside your class

    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HT_CAPTION = 0x2;
    
    [DllImportAttribute("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    [DllImportAttribute("user32.dll")]
    public static extern bool ReleaseCapture();
    

    and your MouseMove event on Panel should look like this

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
       if (e.Button == MouseButtons.Left)
       {
          ReleaseCapture();
          SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
       }
    }
    

    posted it a little late :) , who knows we might need it again in future.

    0 讨论(0)
  • 2021-02-08 20:32

    Bravo's code works perfectly fine but I couldn't get this working until i explicitly made MouseMove event enable in panel's->properties->event section of my panel i wanted to move.

    0 讨论(0)
  • 2021-02-08 20:33

    You might want to take a look at this component that I pasted here:

    http://pastebin.com/5ufJmuay

    It is a component that you will be able to drop on a form, and then drag the form by dragging inside it.

    0 讨论(0)
提交回复
热议问题