Spessotto Ответов: 1

C# перетаскивание элементов управления копированием


Привет, ребята!

Я пытаюсь сделать простое перетаскивание с одной панели на другую...Но то, что я пытаюсь перетащить, - это кнопка...

Проблема в том, что мой код перемещает элемент управления, а не копию.. Я хочу сохранить кнопку источника...

вот мой код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            
            Control ctrl = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
            if (ctrl != null)
            {
                ctrl.Location = this.panel1.PointToClient(new Point(e.X, e.Y));
                this.panel1.Controls.Add(ctrl);

            }

        }

        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            //button1.DoDragDrop(button1, DragDropEffects.Copy | DragDropEffects.Move);
            button1.DoDragDrop(button1, DragDropEffects.Copy );
        }

        private void panel1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy; 
        }

        private void Form1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy ; 
        }


        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            Control ctrl = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
            if (ctrl != null)
            {
                ctrl.Location = this.PointToClient(new Point(e.X, e.Y));
                this.Controls.Add(ctrl);
            }   
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}


спасибо!!


Рафаэль

idenizeni

Итак, вы хотите использовать перетаскивание функционально для клонирования кнопки, а на самом деле не перетаскивать ее?

BillWoodruff

Вы ищете "общее решение", которое можно использовать для перемещения/копирования любого элемента управления, или конкретное решение для данного конкретного случая перемещения/дублирования кнопки с одной панели на другую ? Вы изучали то, что находится на CP и в интернете, о дублировании элементов управления во время выполнения, например: http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms

1 Ответов

Рейтинг:
2

Member 13972239

То, что я понимаю из вашего описания вашей проблемы, и то, что я вижу из вашего кода, это :
Вы хотите скопировать элемент управления, но то, что вы получили, это то, что элемент управления переместился.
Решение простое :
Замените каждое утверждение следующим образом :
Управления.Добавить(Ctrl);
К :
Управление Ctrl2 = nCtrl.Clone();

Controls.Add(Ctrl2);


Dave Kreskowiak

.....с пятилетней давности.