我自动生成2个label,label1是有顺序的,label在前,label2在后。然后怎么实现这两个控件的拖放 可以互换位置 说详细点 谢谢了。在线等

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace Demo4U
    {
        public partial class Form1 : Form
        {
            bool IsMouseDown = false;
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                Label lb1 = new Label();
                lb1.Left = 50;
                lb1.Top = 50;
                lb1.Text = "1111111";
                lb1.AutoSize = true;
                lb1.MouseDown += new MouseEventHandler(lb1_MouseDown);
                lb1.MouseUp += new MouseEventHandler(lb1_MouseUp);
                lb1.MouseMove += new MouseEventHandler(lb1_MouseMove);
                this.Controls.Add(lb1);            Label lb2 = new Label();
                lb2.Left = 150;
                lb2.Top = 50;
                lb2.Text = "2222222";
                lb2.AutoSize = true;
                lb2.MouseDown += new MouseEventHandler(lb1_MouseDown);
                lb2.MouseUp += new MouseEventHandler(lb1_MouseUp);
                lb2.MouseMove += new MouseEventHandler(lb1_MouseMove);
                this.Controls.Add(lb2);
            }        void lb1_MouseMove(object sender, MouseEventArgs e)
            {
                if (IsMouseDown)
                {
                    ((Label)sender).Left += e.X;
                    ((Label)sender).Top += e.Y;
                }
            }        void lb1_MouseUp(object sender, MouseEventArgs e)
            {
                IsMouseDown = false;
            }        void lb1_MouseDown(object sender, MouseEventArgs e)
            {
                IsMouseDown = true;
            }
        }
    }记得给分啊 ,楼主
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    namespace WindowsApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            [DllImport("user32.dll", EntryPoint = "SendMessage")]
            public static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);
            [DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
            public static extern int ReleaseCapture();
            public const int WM_SysCommand = 0x0112;
            public const int SC_MOVE = 0xF012;
            private void Form1_Load(object sender, EventArgs e)
            {
                Label lb = new Label();
                lb.Cursor = Cursors.Hand;
                lb.Text = "可以拖放";
                lb.Location = new Point(100, 100);
                lb.MouseDown += new MouseEventHandler(lb_MouseDown);
                this.Controls.Add(lb);
                
            }        void lb_MouseDown(object sender, MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(((Control)sender).Handle.ToInt32(), WM_SysCommand, SC_MOVE, 0);        }
        }
    }
      

  3.   

    我的label是自动生成的。可以加我QQ 332891525详细聊。可以再给加分!
      

  4.   

    你要求的是表单设计器吧
    http://www.cnblogs.com/michael-zhang/archive/2008/10/07/655267.html
      

  5.   

    Point myPoint;
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                myPoint = new Point(-e.X, -e.Y);
            }        private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    Point myPosition = Control.MousePosition;
                    myPosition.Offset(myPoint.X, myPoint.Y);
                    this.DesktopLocation = myPosition;
                }
            }
      

  6.   


    public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } [DllImport("user32.dll", EntryPoint = "SendMessage")]
    public static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);
    [DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
    public static extern int ReleaseCapture();
    public const int WM_SysCommand = 0x0112;
    public const int SC_MOVE = 0xF012;//动态生成label控件
    private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {
    Label label1 = new Label();
    label1.Location = new System.Drawing.Point(20, 20);
    label1.Name = "label1";
    label1.Text = "label1";
    label1.Size = new System.Drawing.Size(100, 21);
    this.Controls.Add(label1); 
    label1.MouseDown += new System.Windows.Forms.MouseEventHandler(label1_MouseDown);//添加label的mousedown事件
    }
    catch(Exception ex)
    {
    throw ex;
    }
    }void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    try
    {
    ReleaseCapture();
    SendMessage(((Control)sender).Handle.ToInt32(), WM_SysCommand, SC_MOVE, 0); }
    catch(Exception ex)
    {
    throw ex;
    }
    }
      

  7.   

    namespace Demo4U 

        public partial class Form1 : Form 
        { 
            bool IsMouseDown = false; 
            public Form1() 
            { 
                InitializeComponent(); 
            }         private void Form1_Load(object sender, EventArgs e) 
            { 
                Label lb1 = new Label(); 
                lb1.Left = 50; 
                lb1.Top = 50; 
                lb1.Text = "1111111"; 
                lb1.AutoSize = true; 
                lb1.MouseDown += new MouseEventHandler(lb1_MouseDown); 
                lb1.MouseUp += new MouseEventHandler(lb1_MouseUp); 
                lb1.MouseMove += new MouseEventHandler(lb1_MouseMove); 
                this.Controls.Add(lb1); 
                Label lb2 = new Label(); 
                lb2.Left = 150; 
                lb2.Top = 50; 
                lb2.Text = "2222222"; 
                lb2.AutoSize = true; 
                lb2.MouseDown += new MouseEventHandler(lb1_MouseDown); 
                lb2.MouseUp += new MouseEventHandler(lb1_MouseUp); 
                lb2.MouseMove += new MouseEventHandler(lb1_MouseMove); 
                this.Controls.Add(lb2); 
            }         void lb1_MouseMove(object sender, MouseEventArgs e) 
            { 
                if (IsMouseDown) 
                { 
                    ((Label)sender).Left += e.X; 
                    ((Label)sender).Top += e.Y; 
                } 
            }         void lb1_MouseUp(object sender, MouseEventArgs e) 
            { 
                IsMouseDown = false; 
            }         void lb1_MouseDown(object sender, MouseEventArgs e) 
            { 
                IsMouseDown = true; 
            } 
        } 

      

  8.   

    这个方法,当我同时将多个Label的MouseDown绑定到同一个方法时,先移动第一个Label没有问题,移动另一个Label时会导致第一个Label移动。
    不知道是什么原因
      

  9.   

    回复楼上的void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                try
                {
                    ReleaseCapture();
                    SendMessage(((Control)sender).Handle.ToInt32(), WM_SysCommand, SC_MOVE, 0);            }
                catch(Exception ex)
                {
                    throw ex;
                }
            }
    //你把每一个label都添加label1.MouseDown += new System.Windows.Forms.MouseEventHandler(label1_MouseDown);,记得把label1替换掉。
    //在void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)函数中也要替换label1
      

  10.   

    解决了,还要谢谢楼上,原因是Label.AutoSize不能为true,不知道为什么会这样
      

  11.   

    不知道楼主想要什么,这个拷贝=>编译=>运行就看见效果了,完全满足楼主的要求,还觉得不行,难道是俺爷们对汉字的理解不到位,无法理解楼主的意思using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Text; 
    using System.Windows.Forms; namespace Demo4U 

        public partial class Form1 : Form 
        { 
            bool IsMouseDown = false; 
            public Form1() 
            { 
                InitializeComponent(); 
            }         private void Form1_Load(object sender, EventArgs e) 
            { 
                Label lb1 = new Label(); 
                lb1.Left = 50; 
                lb1.Top = 50; 
                lb1.Text = "1111111"; 
                lb1.AutoSize = true; 
                lb1.MouseDown += new MouseEventHandler(lb1_MouseDown); 
                lb1.MouseUp += new MouseEventHandler(lb1_MouseUp); 
                lb1.MouseMove += new MouseEventHandler(lb1_MouseMove); 
                this.Controls.Add(lb1); 
                Label lb2 = new Label(); 
                lb2.Left = 150; 
                lb2.Top = 50; 
                lb2.Text = "2222222"; 
                lb2.AutoSize = true; 
                lb2.MouseDown += new MouseEventHandler(lb1_MouseDown); 
                lb2.MouseUp += new MouseEventHandler(lb1_MouseUp); 
                lb2.MouseMove += new MouseEventHandler(lb1_MouseMove); 
                this.Controls.Add(lb2); 
            }         void lb1_MouseMove(object sender, MouseEventArgs e) 
            { 
                if (IsMouseDown) 
                { 
                    ((Label)sender).Left += e.X; 
                    ((Label)sender).Top += e.Y; 
                } 
            }         void lb1_MouseUp(object sender, MouseEventArgs e) 
            { 
                IsMouseDown = false; 
            }         void lb1_MouseDown(object sender, MouseEventArgs e) 
            { 
                IsMouseDown = true; 
            } 
        }