c # панель к панели перетащить кнопку только 1 раз работает - PullRequest
0 голосов
/ 21 октября 2018
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;
}

Коды в stackoverflow ...

Я пытаюсь добавить в панель кнопку подсчета с foreach:

int n = 0;
foreach (Control btn in panel.Controls) {
n+=1;
}
Label.Text = n.ToString();

Но вывод: 1

Тогда, я не могу отбросить текст кнопки с помощью BringToFront ();

Вы попробуете на VS C # с двумя панелями и 3-4 кнопками это действие и увидите проблему?

1 Ответ

0 голосов
/ 21 октября 2018

Прекрасно работает ... может быть, объясните более подробно, какая у вас проблема?

    void button1_MouseDown(object sender, MouseEventArgs e)
    {           
        Button btn = sender as Button;
        Point offset = new Point(e.X, e.Y);
        btn.Tag = offset;
        btn.DoDragDrop(btn, DragDropEffects.Move);
    }

    void panel_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    void panel_DragDrop(object sender, DragEventArgs e)
    {
        Panel pnl = sender as Panel;
        Point pt = pnl.PointToClient(new Point(e.X, e.Y));
        Button btn = e.Data.GetData(typeof(Button)) as Button;
        Point offset = (Point)btn.Tag;
        pt.Offset(-1 * offset.X, -1 * offset.Y);
        btn.Location = pt;       
        btn.Parent = pnl;
    }

    private void btnCount_Click(object sender, EventArgs e)
    {
        label1.Text = "Buttons: " + panel1.Controls.OfType<Button>().ToList().Count.ToString();
        label2.Text = "Buttons: " + panel2.Controls.OfType<Button>().ToList().Count.ToString();
    }
...