Практически единственный способ чисто разрешить изменение размера элемента управления .NET - использовать P / Invoke.Этот точный код не тестировался, но я использовал этот метод изменения размера много раз, поэтому он должен работать:
Во-первых, внешние объявления P / Invoke:
private static class UnsafeNativeMethods
{
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
}
Далее, вызываем P/ Вызывает функции, чтобы операционная система обрабатывала изменение размера:
protected override void OnMouseDown(MouseEventArgs e)
{
int msg = -1; //if (msg == -1) at the end of this, then the mousedown is not a drag.
if (e.Y < 8)
{
msg = 12; //Top
if (e.X < 25) msg = 13; //Top Left
if (e.X > Width - 25) msg = 14; //Top Right
}
else if (e.X < 8)
{
msg = 10; //Left
if (e.Y < 17) msg = 13;
if (e.Y > Height - 17) msg = 16;
}
else if (e.Y > Height - 9)
{
msg = 15; //Bottom
if (e.X < 25) msg = 16;
if (e.X > Width - 25) msg = 17;
}
else if (e.X > Width - 9)
{
msg = 11; //Right
if (e.Y < 17) msg = 14;
if (e.Y > Height - 17) msg = 17;
}
if (msg != -1)
{
UnsafeNativeMethods.ReleaseCapture(); //Release current mouse capture
UnsafeNativeMethods.SendMessage(Handle, 0xA1, new IntPtr(msg), IntPtr.Zero);
//Tell the OS that you want to drag the window.
}
}
Наконец, переопределите OnMouseMove, чтобы изменить курсор в зависимости от того, где он находится в элементе управления.Я оставлю эту часть вам, потому что это почти тот же код, что и в предыдущем фрагменте.