C# winform 如何实现将Label控件的文本内容拖动到任意的Panel控件中。

C# winform 如何实现将Label控件的文本内容拖动到任意的Panel控件中。

问题描述:

在C# winform中,有一个form窗体,在form窗体中包函四个Panel控件(panel1、panel2、panel3、panel4)以及三个Label控件(label1、label2、label3)。

目前需要实现如下拖动效果:
1、要求将label1控件的text文本内容,手动拖动到任意一个Panel控件中居中显示label1控件text文本内容。
2、并且要求将拖动到Panel控件中的text文本内容再复制一份到label1控件中,且将text文本内容颜色设置成灰色显示。

3、其它label2、label3要求同样实现上述1、2的拖动效果。

请各位帮忙看看,有没有相关的源码或参考资料,谢谢!

按照上面的参考将form改成panel,无法实现将label拖动到panel,且生成副本,帮忙看看。谢谢!
private int count = 1;

    public Form8()
    {
        InitializeComponent();
    }

    private void Form8_Load(object sender, EventArgs e)
    {
        panel1.AllowDrop = true;
        //panel自身支持接受拖拽来的控件 
    }

    private void label1_MouseDown(object sender, MouseEventArgs e)
    {
        //左键的话,标志位为true(表示拖拽开始)     
        if ((e.Button == System.Windows.Forms.MouseButtons.Left))
        {
            label1.DoDragDrop(label1, DragDropEffects.Copy | DragDropEffects.Move);
            //形成拖拽效果,移动+拷贝的组合效果     
        } 
    }

    private void panel1_DragEnter(object sender, DragEventArgs e)
    {
        //当Label被拖拽到WinForm上时候,鼠标效果出现     
        if ((e.Data.GetDataPresent(typeof(Label))))
        {
            e.Effect = DragDropEffects.Copy;
        } 
    }

    private void panel1_DragDrop(object sender, DragEventArgs e)
    {
        //拖放完毕之后,自动生成新控件     
        Label btn = new Label();
        btn.Size = label1.Size;
        btn.Location = this.PointToClient(new Point(e.X, e.Y));
        //用这个方法计算出客户端容器界面的X,Y坐标。否则直接使用X,Y是屏幕坐标     
        this.Controls.Add(btn);
        btn.Text = "按钮" + count.ToString();
        count = count + 1; 
    }