读书人

请教一个自定义button类的有关问题

发布时间: 2012-01-30 21:15:58 作者: rapoo

请问一个自定义button类的问题
小弟现在写了一个button类,是可移动的button 。代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;

namespace WindowsApplication1
{
public class MoveButton : System.Windows.Forms.Button
{
bool moveStart;
Point mousePosition;
public MoveButton()
{

}
protected override void OnMouseDown (System.Windows.Forms.MouseEventArgs mevent)
{
base.OnMouseDown(mevent);
moveStart = true;
mousePosition = mevent.Location;
}
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs mevent)
{
base.OnMouseMove(mevent);
if (moveStart)
{
int movedX, movedY;
movedX = mousePosition.X - mevent.X;
movedY = mousePosition.Y - mevent.Y;
this.Location = new Point(this.Location.X - movedX, this.Location.Y - movedY);
}
}
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs mevent)
{
base.OnMouseUp(mevent);
moveStart = false;
}}
然后在form1内,new了一百个这样的button,代码如下:
public Form1()
{


InitializeComponent();
for (int i = 0; i < 100; i++)
{
int TempInt = i % 5;
int TempInt2 = (int)i / 5;
MoveButton myButton = new MoveButton();
myButton.Size = new Size(75, 25);
myButton.Text = "button " + (i + 1);
myButton.Name = "button " + (i + 1);
myButton.Left = 0 + TempInt * 75;
myButton.Top = 0 + TempInt2 * 25;
this.Controls.Add(myButton);
} }
现在,想给这个movebutton类写一个自定义事件,就是如果这个button,被鼠标拖动超过了form的边框,能触发这个事件,并且使这个button不会移出此form,同时弹出messagebox,显示“button1(或者button2,3....100)超过移动范围”。请教各位大虾。小弟对于自定义事件还不了解。


[解决办法]
声明就可以了,然后就可以直接调用了。
public delegate void MyHandler(string msg);

public event MyHandler OnMyEvent;

在控件的move事件里处理
this.Move+=new EventHandler(button_Move);
private void button_Move(object sender, System.EventArgs e)
{
if(this.Left <this.FindForm().Left)
OnMyEvent( "超出左边界! ");
}

在button控件那里就会出现OnMyEvent事件

读书人网 >C#

热点推荐