Dodanie drag drop do dynamicznie utworzonego przycisku

Odpowiedz Nowy wątek
2019-12-07 23:49

Rejestracja: 10 lat temu

Ostatnio: 1 miesiąc temu

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

Pozostało 580 znaków

2019-12-08 00:08

Rejestracja: 4 lata temu

Ostatnio: 7 minut temu

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[];
}
edytowany 1x, ostatnio: WeiXiao, 2019-12-08 00:09

Pozostało 580 znaków

2019-12-08 00:17

Rejestracja: 10 lat temu

Ostatnio: 1 miesiąc temu

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;
            }
        }
a ten kod co wyżej dałem nie działa? - WeiXiao 2019-12-08 00:18
nie dziala ;/ - onizuka 2019-12-08 00:31

Pozostało 580 znaków

2019-12-08 00:47

Rejestracja: 4 lata temu

Ostatnio: 7 minut temu

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

  • drop.png (0.01 MB) - ściągnięć: 61
edytowany 2x, ostatnio: WeiXiao, 2019-12-08 00:49

Pozostało 580 znaków

2019-12-08 00:51

Rejestracja: 10 lat temu

Ostatnio: 1 miesiąc temu

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;
        }
to Ty chcesz przesuwać przycisk, a nie wrzucać na niego pliki? no to wiele wyjaśnia xD - WeiXiao 2019-12-08 00:52
Hahaha dobra moj blad zle opisalem problem XD - onizuka 2019-12-08 00:53

Pozostało 580 znaków

2019-12-08 01:16

Rejestracja: 10 lat temu

Ostatnio: 1 miesiąc temu

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

Pozostało 580 znaków

Odpowiedz

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