2012-07-10 4 views

Antwort

21

Zur Demonstration, legen zwei Platten auf einem Formular und eine Schaltfläche in einer der Platten:

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

Dieser Ansatz funktioniert auch für Gruppenrahmen, aber die MouseEnter-, Leave und MouseUp Ereignisse manuell hinzugefügt werden muss :

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 
    // ... 
} 
Verwandte Themen