В созданном приложении мы реализуем возможность перемещать кнопку по форме при нажатии на нее мышью. Для этого нам нужно будет переопределить события: 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); }
Исходники: [download id=”12″]
Спасибо большое, очень помогли))
Огромное спасибо!! Очень выручили))