Dodanie drag drop do dynamicznie utworzonego przycisku

0

Tak jak w temacie. Jak dodac do dynamicznie stworzonego przycisku opcje drag drop bo juz nie mam pomyslow.

int a = 1;
        

        private void button2_Click(object sender, EventArgs e)
        {
            Button dynamicButton = new Button();



            // Set Button properties

            dynamicButton.Height = 40;

            dynamicButton.Width = 300;

            dynamicButton.BackColor = Color.Red;

            dynamicButton.ForeColor = Color.Blue;

            dynamicButton.Location = new Point(20, 150);

            dynamicButton.Text = "DBtn"+a;

            dynamicButton.Name = "DBtn"+a;

            dynamicButton.Font = new Font("Georgia", 16);



            // Add a Button Click Event handler

           // dynamicButton.Click += new EventHandler(DynamicButton_Click);
            //dynamicButton.MouseDown += new dynamicButton_MouseDown();
            this.MouseDown += new MouseEventHandler(this.dynamicButton_MouseDown);
            a++;

            Controls.Add(dynamicButton); 
        }

        void dynamicButton_MouseDown(object sender, System.EventArgs dd)
        {
            MouseEventHandler e;
            if (e.Button == MouseButtons.Left)
            {
                isDragged = true;
                Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

                ptOffset = new Point();
                ptOffset.X = button1.Location.X - ptStartPosition.X;
                ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
            }
            else
            {
                isDragged = false;
            }
        }
0
dynamicButton.AllowDrop = true;
dynamicButton.DragEnter += this.DragEnter;
dynamicButton.DragDrop += this.DragDrop;

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

void DragDrop(object sender, DragEventArgs e)
{
	var fileList = e.Data.GetData(DataFormats.FileDrop, false) as string[];
}
0

Zrobilem cos takiego ale cos nie dziala

 this.MouseDown += new MouseEventHandler(this.dynamicButton_MouseDown);
            this.MouseMove += new MouseEventHandler(this.dynamicButton_MouseMove);
            this.MouseUp += new MouseEventHandler(this.dynamicButton_MouseUp);
            a++;

            Controls.Add(dynamicButton); 
        }

        public void dynamicButton_MouseUp(object sender, MouseEventArgs e) 
        {
            isDragged = false;
        }


        public void dynamicButton_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDragged)
            {
                Point newPoint = button1.PointToScreen(new Point(e.X, e.Y));
                newPoint.Offset(ptOffset);
                button1.Location = newPoint;
            }
        }

        public void dynamicButton_MouseDown(object sender, MouseEventArgs e)
        {
            
            if (e.Button == MouseButtons.Left)
            {
                isDragged = true;
                Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

                ptOffset = new Point();
                ptOffset.X = button1.Location.X - ptStartPosition.X;
                ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
            }
            else
            {
                isDragged = false;
            }
        }
0

@onizuka:

u mnie działa ¯\_(ツ)_/¯ sprawdź czy jakiegoś głupiego błędu nie ma :P

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Button dynamicButton = new Button();

            dynamicButton.Height = 40;

            dynamicButton.Width = 300;

            dynamicButton.BackColor = Color.Red;

            dynamicButton.ForeColor = Color.Blue;

            dynamicButton.Location = new Point(20, 150);

            dynamicButton.Text = "DBtn";

            dynamicButton.Name = "DBtn";

            dynamicButton.Font = new Font("Georgia", 16);

            dynamicButton.AllowDrop = true;
            dynamicButton.DragEnter += this.Drag_Enter;
            dynamicButton.DragDrop += this.Drag_Drop;

            Controls.Add(dynamicButton);
        }

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

        void Drag_Drop(object sender, DragEventArgs e)
        {
            var fileList = e.Data.GetData(DataFormats.FileDrop, false) as string[];
        }
    }
}

drop.png

0

U mnie sie kompiluje ladnie wszystko pieknie ale nie moge przesuwac tego przycisku.
A cos takiego dziala mi ...

 bool isDragged = false;
        Point ptOffset;
        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                isDragged = true;
                Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

                ptOffset = new Point();
                ptOffset.X = button1.Location.X - ptStartPosition.X;
                ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
            }
            else
            {
                isDragged = false;
            }
        }

        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDragged)
            {
                Point newPoint = button1.PointToScreen(new Point(e.X, e.Y));
                newPoint.Offset(ptOffset);
                button1.Location = newPoint;
            }
        }

        private void button1_MouseUp(object sender, MouseEventArgs e)
        {
            isDragged = false;
        }
0

Dobra znalazlem rozwiazanie

private Point Origin_Cursor;
private Point Origin_Control;
private bool BtnDragging = false;

private void button1_Click(object sender, EventArgs e)
{
    var b = new Button();
    b.Text = "My Button";
    b.Name = "button";
    //b.Click += new EventHandler(b_Click);
    b.MouseUp += (s, e2) => { this.BtnDragging = false; };
    b.MouseDown += new MouseEventHandler(this.b_MouseDown);
    b.MouseMove += new MouseEventHandler(this.b_MouseMove);
    this.panel1.Controls.Add(b);
}

private void b_MouseDown(object sender, MouseEventArgs e)
{
    Button ct = sender as Button;
    ct.Capture = true;
    this.Origin_Cursor = System.Windows.Forms.Cursor.Position;
    this.Origin_Control = ct.Location;
    this.BtnDragging = true;
}

private void b_MouseMove(object sender, MouseEventArgs e)
{
    if(this.BtnDragging)
    {
        Button ct = sender as Button;
        ct.Left = this.Origin_Control.X - (this.Origin_Cursor.X - Cursor.Position.X);
        ct.Top = this.Origin_Control.Y - (this.Origin_Cursor.Y - Cursor.Position.Y);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1