Это легко сделать, добавив три события мыши (label.MouseDown, label.MouseUp, label.MouseMove)
MouseDown :: Когда кнопка мыши опускается вниз, в зависимости от местоположения мыши (она находится на краю метке или внутри нее), он определяет, перемещается или изменяет размер цель, и сохраняется в двух переменных (_moving, _resizing).
MouseMove : : при перемещении мыши, если кнопка мыши нажата, размер или расположение метки будут обновлены.
MouseUp :: Когда кнопка мыши нажата перевернуть, переменные неверны.
Код: Выделить всё
public class Ulabel
{
public System.Windows.Forms.Label label;
public UTask(string title, Color color, int Lno)
{
label = new System.Windows.Forms.Label();
label.Text = title;
label.BackColor = color;
label.Name = "T" + Lno.ToString();
label.AutoSize = false;
label.Size = new Size(20, 50);
label.Location = new Point(50, 50);
Init();
}
private bool _moving;
private bool _resizing;
private Point _cursorStartPoint;
private Point _cursorStartPointmove;
private Point _cursorLast;
private int _Initwidth;
private bool MouseIsInRightEdge;
int count_call = 0;
internal void Init()
{
_moving = false;
_resizing = false;
_moveIsInterNal = false;
_cursorStartPoint = Point.Empty;
_cursorStartPointmove = Point.Empty;
MouseIsInRightEdge = false;
label.MouseDown += (sender, e) => MouseDown(label, e);
label.MouseUp += (sender, e) => MouseUp(label);
label.MouseMove += (sender, e) => MouseMove(label, e);
}
private void UpdateMouseEdgeProperties(Control control, Point mouseLocationInControl)
{
MouseIsInRightEdge = Math.Abs(mouseLocationInControl.X - control.Width)
Подробнее здесь: [url]https://stackoverflow.com/questions/78827301/mousemove-event-work-with-jump-between-two-location[/url]
Мобильная версия