Ok, questo è l'indispensabile, già convertito in C#:
public class TuaForm
{
//L'azione che deve essere eseguita allo spostamento del mouse
MouseAction action = MouseAction.None;
//È la posizione del mouse all'inizio degli spostamenti
Point offset = Point.Empty;
//Le possibili azioni che si possono effettuare col mouse
[Flags()]
public enum MouseAction
{
None = 0,
Move = 1,
ResizeN = 2,
ResizeE = 4,
ResizeS = 8,
ResizeW = 16,
ResizeNE = ResizeN | ResizeE,
ResizeNW = ResizeN | ResizeW,
ResizeSE = ResizeS | ResizeE,
ResizeSW = ResizeS | ResizeW
}
//Ottiene l'azione in base alla posizione del mouse rispetto al controllo
protected static MouseAction GetMouseAction(Control target, Point mousePos)
{
MouseAction res = MouseAction.None;
if (mousePos.X < 10) {
res = MouseAction.ResizeW;
}
else if (mousePos.X > target.Width - 10) {
res = MouseAction.ResizeE;
}
if (mousePos.Y < 10) {
res = res | MouseAction.ResizeN;
}
else if (mousePos.Y > target.Height - 10) {
res = res | MouseAction.ResizeS;
}
if (res == MouseAction.None) return MouseAction.Move;
return res;
}
//Questo è il gestore per l'evento MouseMove dei tuoi Button
private void controls_MouseMove(object sender, MouseEventArgs e)
{
Control that = (Control)sender;
if (action == MouseAction.Move) {
//muove il controllo
that.Left += e.X - offset.X;
that.Top += e.Y - offset.Y;
return;
}
//Imposta il cursore
if (action == MouseAction.None) {
switch (GetMouseAction(that, e.Location)) {
case MouseAction.ResizeE:
case MouseAction.ResizeW:
that.Cursor = Cursors.SizeWE;
break;
case MouseAction.ResizeN:
case MouseAction.ResizeS:
that.Cursor = Cursors.SizeNS;
break;
case MouseAction.ResizeNE:
case MouseAction.ResizeSW:
that.Cursor = Cursors.SizeNESW;
break;
case MouseAction.ResizeNW:
case MouseAction.ResizeSE:
that.Cursor = Cursors.SizeNWSE;
break;
default:
that.Cursor = Cursors.Default;
break;
}
return;
}
//Ridimensionamenti
if ((action & MouseAction.ResizeN) == MouseAction.ResizeN) {
that.Top += e.Y - offset.Y;
that.Height -= e.Y - offset.Y;
}
if ((action & MouseAction.ResizeE) == MouseAction.ResizeE) {
that.Width = e.X;
}
if ((action & MouseAction.ResizeS) == MouseAction.ResizeS) {
that.Height = e.Y;
}
if ((action & MouseAction.ResizeW) == MouseAction.ResizeW) {
that.Left += e.X - offset.X;
that.Width -= e.X - offset.X;
}
}
//Questo è il gestore per l'evento MouseDown dei tuoi Button
private void buttons_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == Windows.Forms.MouseButtons.Left) {
action = GetMouseAction(sender, e.Location);
offset = e.Location;
}
}
//Questo è il gestore per l'evento MouseUp dei tuoi Button
private void buttons_MouseUp(object sender, MouseEventArgs e)
{
action = MouseAction.None;
}
}
Luca