Tips: Mover ventanas sin bordes

Hola a todos otra vez, el truquejo de hoy es algo
que utilizo de manera más o menos frecuente. Siempre que hago alguna aplicación
que va sin bordes, bien porque se los quito o bien porque modifico la región
del formulario me quedo sin la posibilidad de mover la ventana de lugar. Bueno
pues agregando este código a los eventos Move, Down y Up
de mouse en la ventana, consigo volver a trasladar el formulario de lugar en la
pantalla.

A los que estén haciendo probaturas como yo todo
el día con las ventanas, les recomiendo que lo tengan a mano. Por ejemplo, en
el proyecto en el que estoy ahora de momento se ha dejado la ventana fija ya
que ahora mismo solo queremos conseguir la funcionalidad y no preocuparnos de
que pasa si se redimensiona la ventana o no.

Bien pues cuando le dejamos el ejecutable a
nuestro diseñador para que nos creara los gráficos que tenemos que colocar en
la interfaz, como tiene dos monitores se le queda en medio de los dos y es
bastante incomodo. Con estas poquitas líneas de código se soluciona el problema
en menos que canta un gallo.

//—- Variables globales de la clase —–

private Point mouseOffset;
private bool isMouseDown = false;

//—— Métodos
necesarios para controlar los movimientos del ratón —–

private void
Form1_MouseDown(object sender, MouseEventArgs e)

{
    int xOffset;
    int yOffset;

    if (e.Button == MouseButtons.Left)
    {
        xOffset = -e.X – SystemInformation.FrameBorderSize.Width;
        yOffset = -e.Y – SystemInformation.CaptionHeight – SystemInformation.FrameBorderSize.Height;
        mouseOffset = new Point(xOffset, yOffset);
        isMouseDown = true;
    }
}

// El campo isMouseDown se utiliza para controlar si el usuario mantiene
presionado

// el botón del ratón. El formulario debe moverse sólo cuando esté
presionado el

// botón del mouse.

private
void Form1_MouseMove(object sender, MouseEventArgs e)

{

    if (isMouseDown)
    {
        Point mousePos = Control.MousePosition;
        mousePos.Offset(mouseOffset.X, mouseOffset.Y);
        Location = mousePos;
    }
}

// Controla el campo isMouseDown de forma que el formulario no se mueve
a

//menos que se presione el botón izquierdo del ratón

private
void Form1_MouseUp(object sender, MouseEventArgs e)

{

    if (e.Button == MouseButtons.Left)
    {
        isMouseDown = false;
    }
}

Bueno espero que sea útil.

 Saludetes[H]