Я создал переопределение метки, которое позволит легко перемещать мой новый элемент управления по экрану.
Я прикрепил приведенный ниже код, но когда я запускаю приложение или пытаюсь переместить метку, она всегда выключена. Это также иногда просто полностью исчезнет, оставит след или вернется в положение 0,0. Посмотрите на скриншот.
Раньше у меня это работало на 100%, но после некоторой недавней настройки оно снова пошло к собакам, и я не уверен, как заставить это работать.
Скриншот:

Код:
internal sealed class DraggableLabel : Label
{
private bool _dragging;
private int _mouseX, _mouseY;
public DraggableLabel()
{
DoubleBuffered = true;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (_dragging)
{
Point mposition = PointToClient(MousePosition);
mposition.Offset(_mouseX, _mouseY);
Location = mposition;
}
base.OnMouseMove(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
_dragging = true;
_mouseX = -e.X;
_mouseY = -e.Y;
BringToFront();
Invalidate();
}
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (_dragging)
{
_dragging = false;
Cursor.Clip = new Rectangle();
Invalidate();
}
base.OnMouseUp(e);
}
}