using System;
using System.Drawing;
using System.Windows.Forms;
namespace DraggablePanelExample
{
    public partial class MainForm : Form
    {
        // 用于存储拖动状态和初始位置
        private bool isDragging = false;
        private Point dragStartPosition;
        private Point panelStartLocation;
        public MainForm()
        {
            InitializeComponent();
            InitializePanel();
        }
        private void InitializePanel()
        {
            // 创建Panel并设置基本属性
            Panel draggablePanel = new Panel();
            draggablePanel.Size = new Size(200, 150);
            draggablePanel.BackColor = Color.LightBlue;
            draggablePanel.BorderStyle = BorderStyle.FixedSingle;
            draggablePanel.Location = new Point(50, 50);
            draggablePanel.Cursor = Cursors.Hand;  // 设置手型光标
            
            // 添加标签说明
            Label label = new Label();
            label.Text = "拖我移动!";
            label.Dock = DockStyle.Fill;
            label.TextAlign = ContentAlignment.MiddleCenter;
            draggablePanel.Controls.Add(label);
            // 订阅鼠标事件
            draggablePanel.MouseDown += Panel_MouseDown;
            draggablePanel.MouseMove += Panel_MouseMove;
            draggablePanel.MouseUp += Panel_MouseUp;
            // 添加到窗体
            this.Controls.Add(draggablePanel);
        }
        private void Panel_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                isDragging = true;
                dragStartPosition = e.Location;  // 鼠标相对于Panel的位置
                panelStartLocation = ((Control)sender).Location;  // Panel当前的位置
                
                // 可选:改变Panel外观表示拖动中
                ((Panel)sender).BackColor = Color.SkyBlue;
            }
        }
        private void Panel_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDragging)
            {
                // 计算新的位置
                Point newLocation = panelStartLocation + new Size(e.X - dragStartPosition.X, 
                                                                 e.Y - dragStartPosition.Y);
                
                // 应用新位置
                ((Control)sender).Location = newLocation;
            }
        }
        private void Panel_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                isDragging = false;
                
                // 恢复Panel外观
                ((Panel)sender).BackColor = Color.LightBlue;
            }
        }
    }
}