vb.net 动态控件如何实现拖动功能

 我来答
创作者zUzVB1Sl31
推荐于2016-10-05 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5974

向TA提问 私信TA
展开全部

VB.NET没写过,C#的倒是经常用,你看看能不能有所启发

void Creact()  //创建4*5格=20个按钮的键盘
{
   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;
   }
}
这样我I就给一组按钮加了拖动状态
追问
我是定义了一个类,并在类里添加了事件,但在写代码时调用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;

我多写了+,这样就不是只读了

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式