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事件该怎么写
{
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事件该怎么写
ctrl.Left = e.X;
ctrl.Top = e.Y;俺是这么实现的 有谁有更好的?????
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);
当在控件上键按下,注册移动事件。
当放开鼠标键, 移除事件。 否则。。一移动所有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设置
否则可能发生控件重叠的情况