9

フォームに 5 つのパネルがあり、2 つの異なるパネルに 2 つのボタンがあります。現在、ボタンをあるパネルから別のパネルに移動する必要があります。

コードを提案してください。

4

2 に答える 2

26

デモ用に、フォームに 2 つのパネルを配置し、パネルの 1 つにボタンを配置します。

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;
}
于 2012-07-10T13:09:36.870 に答える
0

この方法はグループ ボックスでも機能しますが、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
    // ...
}
于 2018-03-06T23:39:13.543 に答える