从列表框拖放到面板

时间:2013-08-01 09:37:02

标签: c# winforms drag-and-drop

我正在做我的第一个拖放应用程序。我有一个工具箱,您可以在其中找到与Visual Studio完全相同的标签,按钮和其他组件。我在中间有小组。我希望用户将按钮拖放到面板。我写了一些代码,但没有做拖放技巧。

这是屏幕截图enter image description here

这是我的代码,应该处理拖放

private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        ListBox box = (ListBox)sender;
        String selectedValue = box.Text;
        DoDragDrop(selectedValue.ToString(), DragDropEffects.Copy);
    }

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

    private void pnl_form_DragDrop(object sender, DragEventArgs e)
    {
        Label newLabel = new Label();
        newLabel.Name = "testLabel";
        newLabel.Text = e.Data.GetData(DataFormats.Text).ToString();

        newLabel.AutoSize = true;

        newLabel.Parent = pnl_form;
    }

我做错了吗?

1 个答案:

答案 0 :(得分:1)

请记住在要删除内容的控件上设置AllowDrop = true

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{        
    String selectedValue = (listBox1.SelectedItem ?? "NULL").ToString();
    DoDragDrop(selectedValue, DragDropEffects.Copy);
}