public class Form1 : Form 

    public int Count;     //某个方法里 
    protected void Method() 
    { 
        Class1 c = new Class1(); 
        c.AddLabel(this,out Count); 
    } 

public class Class1
    {
        public void AddLabel(Form f, out int count)
        {
            count++;
            Label l = new Label();
            l.Name = "label" + count;
            l.Text = "****";
            l.MouseDoubleClick += new MouseEventHandler(l_MouseDoubleClick);
            //继续为l其他属性赋值              l.MouseDown += new MouseEventHandler(l_MouseDown);
              l.MouseMove += new MouseEventHandler(l_MouseMove);
               l.MouseUp += new MouseEventHandler(l_MouseUp);
            f.Controls.Add(l);
        }        void l_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Form1 form = new Form1();
            form.Show();
        }
    } 因为Lable 数量不确定 需要动态加载 不知道怎么去用鼠标移动加载过的lable事件该怎么写

解决方案 »

  1.   

     Control ctrl = (Control)sender;
     ctrl.Left = e.X;
    ctrl.Top = e.Y;俺是这么实现的 有谁有更好的?????
      

  2.   

    也可这样。 
    Form ff = null;
     public void AddLabel(Form f, out int count)
            {
                ff = f;
               .....
            }
    (sender as Label).Location = new Point(Cursor.Position.X - ff.Location.X, Cursor.Position.Y - ff.Location.Y);
      

  3.   

    我觉得需要注册三个事件
    当在控件上键按下,注册移动事件。
    当放开鼠标键,  移除事件。 否则。。一移动所有lable就移动了,也不否附合用户习愦了。 label1.MouseDown += delegate { label1.MouseMove += new MouseEventHandler(label1_MouseMove); };
     label1.MouseUp += delegate { label1.MouseMove -= new MouseEventHandler(label1_MouseMove); };  void label1_MouseMove(object sender, MouseEventArgs e)
            {
                label1.Location = new Point(e.X, e.Y);
            }  还要解决的问题: 1.检测窗体位置,当控件到达边界时的处理。
                     2.我猜测拖动时可能会有重影,建议重写一下lable用双缓冲之类的处理一下。
                             其他解决方案 : 建一个可移动的父级控件,在控件上按下隐藏当前控件,注册该控件的拖拽事件,当键抬起后
      注销事件。   至于生成多个lable应该比较简单,维护一个列表,一个个往窗体或控件上加载,不过要注意位置,用left和top设置
      否则可能发生控件重叠的情况      
      

  4.   

    在你动态加载的label上重载鼠标点击,鼠标拖动和鼠标释放事件
      

  5.   

    label数量不定的话:你自己做个自定义事件,我鼠标移动那些事件都重写,把对象放到事件中就可以了