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

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

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_bye.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_good.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_negative.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_scratch.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_wacko.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_yahoo.gif 
http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_cool.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_heart.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_rose.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_smile.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_whistle3.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_yes.gif 
http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_cry.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_mail.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_sad.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_unsure.gif  http://csharpcoding.org/wp-content/plugins/wp-monalisa/icons/wpml_wink.gif