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;
}
}
}
}