Como mover Form sin Bordes
Muchas veces queremos tener un Form diseñado por nosotros mismos cuando practicamos la programación en c#, restandole los clásicos controles de Windows o no depender del estilo de nuestro Windows o su versión, para eso podemos quitarle los Bordes a nuestro Form, pero ya te habrás dado cuenta si lo intentaste, que una vez hecho esto nuestro Form no tendrá la opción de moverse, ni contara con los botones de cerrar, maximizar o minimazar, para eso veremos como hacer una aplicación que no contenga estilos de Windows, lo que necesitamos es lo siguiente:
- Quitarle los Bordes a un Form.
- Agregar ya sea una Imagen de Fondo, o dibujar alguna utilizando algunos Panel.
- Agregar un botón para cerrar el Form.
Como ejemplo puedes tomar el Form que se muestra en este post.
Una vez diseñado nuestro Form, debemos incluir en nuestro código lo siguiente:
Importar las Dll de user32 de Windows que contiene los métodos para mover ventanas, las cuales podemos agregar con el siguiente código:
[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private extern static void ReleaseCapture();
[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
Lo siguiente sera agregar el Evento Mouse Down a nuestro form, que sera el que se activara cuando queramos arrastrar nuestro form:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, 0x112, 0xf012, 0);
}
Por ultimo solo nos faltara agregar el código para cerrar la aplicación en nuestro botón cerrar:
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
Espero les haya sido de utilidad, saludos.
EH PEGADO EXACTAMENTE ESO CODIGO Y EH PUESTO LAS LIBRERIAS NECESARIAS Y AUN NO ME PUEDE MOVER LA VENTANA, TIENES ALGUNA RECOMENDACION?
ResponderEliminarmi recomendación es que en el manejador de eventos de la forma osea el Icono de un Rayo, especifiques que ya estas agregando el evento Mouse Down a esa forma, hay tendrás todos los eventos disponibles para tu forma debes agregar el MouseDown porque por default no te lo reconocerá.
Eliminara mi me funciono esta perefctamente:
Eliminarhttp://www.elguille.info/colabora/puntoNET/couoh_FormDragDrop.htm
Lo que comentas sobre indicarlo en la pestaña de Eventos ha funcionado para mi.
EliminarFunciona correctamente, solo hay que importar una librería
ResponderEliminarusing System.Runtime.InteropServices; y creo que solucionará el inconveniente de Anónimo
Toda la razon. Yo estoy practicando programacion c# y con eso se soluciono totalmente. Saludos desde el futuro 2020
EliminarSe puede quitar los bordes de una aplicación de terceros con borde, justamente para no poder moverla ni cerrarla con la librería user32.dll.
ResponderEliminarPero en que parte del codigo se agrega?
ResponderEliminarpara que funcione debes importar
Eliminarusing System.Runtime.InteropServices;
el primer codigo se coloca en
public partial class xxx : Form
{ aqui }
muy bien gracias! desde Rep.Dom
ResponderEliminarMuchas gracias. Funcionó como debe. Saludos.
ResponderEliminarGracias :)
ResponderEliminarMe funciona muy bien, pero hay alguna forma de introducir el codigo en una clase o algo parecido y no estar pegando el codigo en cada formulario??
ResponderEliminarHola buen dia,
ResponderEliminarYo tengo un problema me marca un error en el IntPtr, me dice qu0e esta en el comflicto con el tipo importado IntPtr de mscorlib, Version 4.0.0.0, Culture=neutral, PublicKeyToken=b77a5etcetc. Alguien sabe?
si funciona a la primera
ResponderEliminar