如何将按钮从一个面板拖放到另一个面板?

我有一个表格中的5个面板和两个不同面板中的两个按钮,现在要求将按钮从一个面板移动到另一个面板。

请给我一个代码。

为了演示,将两个面板放在一个窗体上的一个窗体和一个按钮上:

public Form1() { InitializeComponent(); panel1.AllowDrop = true; panel2.AllowDrop = true; panel1.DragEnter += panel_DragEnter; panel2.DragEnter += panel_DragEnter; panel1.DragDrop += panel_DragDrop; panel2.DragDrop += panel_DragDrop; button1.MouseDown += button1_MouseDown; } void button1_MouseDown(object sender, MouseEventArgs e) { button1.DoDragDrop(button1, DragDropEffects.Move); } void panel_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } void panel_DragDrop(object sender, DragEventArgs e) { ((Button)e.Data.GetData(typeof(Button))).Parent = (Panel)sender; } 

此方法也适用于Group Box,但必须手动添加MouseEnter,MouseLeave和MouseUp事件:

 public frmMain ( ) { InitializeComponent ( ); pbxMoveIt.BringToFront ( ); gbx1.AllowDrop = true; gbx2.AllowDrop = true; lblStatus.Text = "GUI Status: Started"; gbx1.MouseEnter += gbx_MouseEnter; gbx1.MouseLeave += gbx_MouseLeave; gbx1.MouseUp += gbx_MouseUp; gbx2.MouseEnter += gbx_MouseEnter; gbx2.MouseLeave += gbx_MouseLeave; gbx2.MouseUp += gbx_MouseUp; } private void gbx_MouseEnter ( object sender, EventArgs e ) { // useful code // ... } private void gbx_MouseLeave ( object sender, EventArgs e ) { // useful code // ... } private void gbx_MouseUp ( object sender, EventArgs e ) { // useful code // ... }