从动态对象拖放

时间:2014-12-30 18:29:43

标签: c# .net winforms drag-and-drop

我创建了一个可重用的用户控件,并实现了拖放方法。 (基本上只有拖动)。我在FlowLayoutPanel中动态创建这些用户控件的列表,我想从FlowLayoutPanel容器外部的其中一个控件中拖出一些东西。

我该怎么做?我可以拖动但是当我将鼠标移动到我实现拖动的对象(mousedownEvent和DragEnter事件)之外时,光标变为拒绝光标并且它不起作用。我试图在FlowLayoutPanel之外设计一个标签并实现DragDrop事件,但它不起作用。

这是用户控件上的代码:

    public void projectLabel_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.Text))
            e.Effect = DragDropEffects.Copy;
        else
            e.Effect = DragDropEffects.None;
    }

    public void projectLabel_MouseDown(object sender, MouseEventArgs e)
    {
        projectLabel.DoDragDrop(projectLabel.Text, DragDropEffects.Copy | DragDropEffects.Move);
    }

这是主要形式:

    public void label2_DragDrop(object sender, DragEventArgs e)
    {
        MessageBox.Show(e.Data.GetData(DataFormats.Text).ToString());
    }

这就是我填写控件列表的方式:

    private void SchedulerMain_Load(object sender, EventArgs e)
    {
        // Populate the availableProjectList

        Scheduler.common.ProjectContainer projectContainer = new Scheduler.common.ProjectContainer();
        projectContainer.AllowDrop = true;
        projectContainer.projectName = "TEST";
        projectContainer.currentCounter = "1";
        projectContainer.BackColor = Color.FromArgb(255, 255, 128);

        availableProjectList.Controls.Add(projectContainer);

        Scheduler.common.ProjectContainer projectContainer2 = new Scheduler.common.ProjectContainer();
        projectContainer2.AllowDrop = true;
        projectContainer2.projectName = "TEST 2";
        projectContainer2.currentCounter = "1";
        projectContainer2.BackColor = Color.FromArgb(128, 128, 255);

        availableProjectList.Controls.Add(projectContainer2);



    }

在所有对象上将AllowDrag设置为true

我的问题是:如何将对象从容器内的动态创建对象拖动到容器外的另一个对象,但是在同一表单上?

谢谢你们

0 个答案:

没有答案