В созданном приложении мы реализуем возможность перемещать кнопку по форме при нажатии на нее мышью. Для этого нам нужно будет переопределить события: OnMouseDown, OnMouseUp и OnMouseMove которые и будут отслеживать захват кнопки мышью и её перемещение.
Создадим приложение WindowsFormsApplication и добавим в проект новый класс. Назовем его MyButton. Унаследуем наш класс от System.Windows.Forms.Button что даст нам все свойства и методы обычной кнопки. Теперь переопределим необходимые события:
Добавляем пространства имен:
using System.Drawing;
using System.Windows.Forms;
Код класса:
class MyButton : Button
{
//точка перемещения
Point DownPoint;
//нажата ли кнопка мыши
bool IsDragMode;
protected override void OnMouseDown(MouseEventArgs mevent)
{
DownPoint = mevent.Location;
IsDragMode = true;
base.OnMouseDown(mevent);
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
IsDragMode = false;
base.OnMouseUp(mevent);
}
protected override void OnMouseMove(MouseEventArgs mevent)
{
//если кнопка мыши нажата
if (IsDragMode)
{
Point p = mevent.Location;
//вычисляем разницу в координатах между положением курсора и "нулевой" точкой кнопки
Point dp = new Point(p.X - DownPoint.X, p.Y - DownPoint.Y);
Location = new Point(Location.X + dp.X, Location.Y + dp.Y);
}
base.OnMouseMove(mevent);
}
}
Все, наш класс готов. Теперь добавим созданную кнопку на нашу форму и протестируем наше приложение:
public Form1()
{
InitializeComponent();
MyButton btn = new MyButton();
btn.Name = "btn";
btn.SetBounds(10, 10, 130, 23);
btn.Text = "My Button";
this.Controls.Add(btn);
}

Исходники:
MoveButton.rar (30,7 KiB, 2 282 закачек)
Похожие статьи
Спасибо большое, очень помогли))
Огромное спасибо!! Очень выручили))