sxl_88
2015-05-06 13:08
采纳率: 50%
浏览 5.1k
已采纳

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的拖动效果。

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • blownewbee 2015-05-06 14:27
    已采纳
    点赞 评论
  • sxl_88 2015-05-07 01:16

    按照上面的参考将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; 
        }
    
    点赞 评论

相关推荐 更多相似问题