vb.net 动态控件如何实现拖动功能
1个回答
展开全部
VB.NET没写过,C#的倒是经常用,你看看能不能有所启发
void Creact() //创建4*5格=20个按钮的键盘这样我I就给一组按钮加了拖动状态
{
const int width=Convert.ToInt32(this.panel1.Width/20);
const int height=Convert.ToInt32(this.panel1.Width/25);
for(int i=1;i<=5;i++)
{
for(int j=1;j<=4;j++)
{
Button b=new Button();
b.Name="btn"+i.ToString()+j.ToString();
b.Left=40*j;
b.Top=30*i;
b..... //位置设置
b.Text=CortoEnglist(i+j+65);//转换字母键函数略写
...
//加入鼠标事件
b.MouseDown+=new MouseHandler(btn_mousedown);
b.MouseUp+=new MouseHandler(btn_mouseup);
b.MouseLeave+=new MouseHandler(btn_mouseleave);
b.MouseMove+=new MouseHandler(btn_mousemove);
this.panel1.Controls.Add(b)
}
}
}
public int Bealoon br=false; //判断是否按下全局变量
void btn_mousedown(object sender,MouseEventArgs e) //鼠标按下开始计算
{
br=true;
}
void btn_mouseleave(object sender,MouseEventArgs e) //鼠标移开就结束
{
br=false;
}
void btn_mouseup(object sender,MouseEventArgs e) //鼠标弹起也会结束
{
br=false; //跟移开不重复,你按下不松手去按另一个发现他就不会弹起,所以要加这个事件
}
void btn_mousemove(object sender,MouseEventArgs e) //按下状态拖动就有效
{
if(br==true)
{
((Button)sender).Left+=e.X;
((Button)sender).Top+=e.Y;
}
}
追问
我是定义了一个类,并在类里添加了事件,但在写代码时调用MouseEventArgs值时出错
追答
是 new MouseEventHandler 我写错了,急急匆匆地没注意。((Button)sender).Left+=e.X;如果((Button)sender).Left只读,那么可以这么写:
Button btn=(Button)panel1.Controls[((Button)sender).Name];//用字符串找按钮
btn.Left=e.X;
btn.Top=e.Y;
我多写了+,这样就不是只读了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询