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]
25 abril, 2007 a las 8:57 am
Cesar, hemos estado mirando esto de mover las ventanas y lo hemos metido en el proyecto.
Al meter el código que nos aportas en este post me di cuenta de que hacia un efecto raro al mover la ventana y elimine unas lineas que has metido de más.
No hay que tener en cuenta el tamaño de los bordes de la ventana, así el método que se veria afectado es el de Form1_MouseDown. Quedaria de la siguiente forma:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X;
yOffset = -e.Y;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
Muy bien crack, muy interesante el post.
Un saludo!!!