Перемещение кнопки по форме

В созданном приложении мы реализуем возможность перемещать кнопку по форме при нажатии на нее мышью. Для этого нам нужно будет переопределить события: 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 закачек)

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Google Buzz
Опубликовать в Одноклассники
Опубликовать в Яндекс
Опубликовать в Мой Мир

Похожие статьи

Комментарии (2) на “Перемещение кнопки по форме”

Оставить комментарий