简体   繁体   English

C#面板到面板按钮拖放仅工作1次

[英]c# panel to panel button dragdrop only 1 time working

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

Codes in stackoverflow... Stackoverflow中的代码...

I am trying for count added button in panel with foreach : 我正在尝试使用foreach在面板中添加计数按钮:

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

But output : 1 但输出:1

Then, i can't dropped button's text with BringToFront(); 然后,我无法使用BringToFront()删除按钮的文本;

Would you try on VS C# with two panel and 3-4 buttons this action and see problem? 您是否会尝试使用带有两个面板和3-4个按钮的VS C#来查看问题?

Works great...maybe explain in more detail what issue you are having? 效果很好...也许可以更详细地说明您遇到的问题?

    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();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM