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