1个回答
展开全部
VB.NET没写过,C#的倒是经常用,你看看能不能有所启发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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; } } |
追问
我是定义了一个类,并在类里添加了事件,但在写代码时调用MouseEventArgs值时出错
追答
是 new MouseEventHandler 我写错了,急急匆匆地没注意。((Button)sender).Left+=e.X;如果((Button)sender).Left只读,那么可以这么写:
1 2 3 | Button btn=(Button)panel1.Controls[((Button)sender).Name]; //用字符串找按钮 btn.Left=e.X; btn.Top=e.Y; |
我多写了+,这样就不是只读了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询