Ну, да, это технически возможно. Не то, что вы должны когда-либо делать.
Важно то, где находился курсор мыши, когда вы нажимали кнопку мыши. Это вызывает событие MouseDown в базовом элементе управления. Но делает что-то еще, он также захватывает мышь. Открывается свойство Control.Capture.
Это важно, это гарантирует, что событие MouseUp будет надежно запущено. Многие элементы управления используют это событие для запуска события Click. Как кнопка. Побочным эффектом является то, что элемент управления, на который вы двигаете мышь, удерживая кнопку, не будет видеть никаких сообщений мыши. Вместо этого они управляются щелчком. Даже если вы полностью перемещаете мышь за пределы элемента управления.
Это можно переделать. Вы могли бы, скажем, установить свойство Capture обратно на false в обработчике события MouseDown элемента управления, что фактически делает клик полностью неэффективным. Или вы можете контролировать положение мыши с помощью MouseMove и отменить захват, когда увидите, что он перемещается за пределы DisplayRectangle.
Все, что вы можете сделать, но вы, вероятно, не должны. Вы делаете свой пользовательский интерфейс по-другому, чем пользовательский интерфейс большинства других программ, с которыми пользователь знаком. Или, что еще хуже, это противоречиво в вашем собственном интерфейсе, вероятно, произойдет. Смутить такого пользователя очень редко бывает хорошей идеей. Это тебе решать.
Перетаскивание имеет собственные события DragEnter, DragOver и DragDrop. Но я не думаю, что он срабатывает, если он падает, когда он входит. – Plutonix