2012-07-10 8 views

risposta

21

per la dimostrazione, inserire due pannelli su una forma e un bottone in uno dei pannelli:

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

Questo approccio funziona anche per le caselle di gruppo, ma gli eventi MouseEnter, MouseLeave e MouseUp deve essere aggiunto manualmente :

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 
    // ... 
} 
Problemi correlati