Вот демонстрация, которая иллюстрирует ваш подход и предложенный в комментариях.
Тестирование вашего кода дает:
Принимая во внимание, что предлагаемый код:
using System.Runtime.InteropServices;
//...
private const int WM_SYSCOMMAND = 0x112;
private const int MOUSE_MOVE = 0xF012;
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(
IntPtr hWnd,
int wMsg,
IntPtr wParam,
IntPtr lParam);
[DllImport("user32.dll")]
private static extern int ReleaseCapture(IntPtr hWnd);
private void picBox_MouseMove(object sender, MouseEventArgs e)
{
if (!DesignMode && e.Button == MouseButtons.Left)
{
ReleaseCapture(picBox.Handle);
SendMessage(picBox.Handle, WM_SYSCOMMAND, (IntPtr)MOUSE_MOVE, IntPtr.Zero);
}
}
Производит:
Обратите внимание, что я также использую фоновое изображение, чтобы сделать ситуацию хуже, если можно так сказать. Однако без фонового изображения сложно определить, какой фрагмент кода используется.