En ocasiones es (visualmente) interesante diseñar un formulario que no tenga bordes. En este caso el problema que aparece es que no podemos desplazar el formulario por la pantalla a una posición que nos sea mas cómoda para el trabajo.
La barra de título de un formulario tiene una serie de propiedades gráficas, entre la que se encuentra la de poder desplazar el formulario a la posición que nos interese en la pantalla. Si eliminamos esa barra de título [Ver Form.FormBorderStyle (Propiedad)], nos quedamos sin la posibilidad de mover el formulario por lo que tenemos que escribir el código adecuado para imitar esa habilidad.
Buscando por internet se encuentra, sobre todo, soluciones que recurren a llamadas a la API de Windows, pero como a mí no me gusta hacer esas llamadas, he seguido buscando hasta que he dado con una página de Microsoft en la que se describe Cómo: Crear formularios Windows Forms no rectangulares en la que de forma indirecta está resuelto este problema
El código que se muestra a continuación esta copiado de dicha dirección y mínimamente adaptado a lo que yo necesito
#Region "Para mover el Form con el boton izquierdo del mouse pulsado" '------------------------------------------------------------ ' Codigo original en: ' Cómo: Crear formularios Windows Forms no rectangulares ' http://msdn.microsoft.com/es-es/library/6k15y9et(VS.80).aspx '-------------------------------------------------------------- ' Tenga en cuenta que este proceso supone mucho procesamiento ' de gráficos para el hardware implicado; por tanto, el ' rendimiento variará según la memoria y la tarjeta gráfica ' de cada equipo. ' Cuando las aplicaciones impliquen dibujos personalizados, ' pruebe siempre con varias tarjetas de vídeo para garantizar ' un rendimiento satisfactorio antes de facilitárselas ' a los usuarios. '-------------------------------------------------------------- '1 Crear un objeto Point nuevo que actuará como variable ' cuando calcule cómo mover el formulario. ' El campo isMouseDown se utiliza para controlar ' si el usuario mantiene presionado el botón del mouse. ' El formulario debe moverse sólo cuando esté ' presionado el botón del mouse. Private _isMouseDown As Boolean = False Private _mouseOffset As Point = Nothing '-------------------------------------------------------------- '2.Controlador de eventos para el evento MouseDown del formulario. ' En el controlador, agregue código que permita al usuario ' hacer clic en cualquier parte del formulario para arrastrarlo. ' Escriba código para asignar coordenadas a la variable mouseOffset ' en función de la posición actual del puntero del mouse. ' En el siguiente código, observe que la posición de desplazamiento se ' calcula utilizando información del sistema sobre el tamaño del ' borde (FrameBorderSize.Width) y el alto de la barra de título (CaptionHeight). ' Estas medidas se deben tener en cuenta cuando se pruebe el desplazamiento, ' puesto que algunas medidas se realizan con el área cliente y otras con las ' coordenadas de la pantalla. Por tanto, el desplazamiento es igual al ancho ' del borde más el alto de la imagen más el desplazamiento ' en el área cliente del formulario Private Sub Form1_MouseDown( _ ByVal sender As Object, _ ByVal e As MouseEventArgs) Handles MyBase.MouseDown Dim xOffset As Integer Dim yOffset As Integer If e.Button = MouseButtons.Left Then xOffset = -e.X - SystemInformation.FrameBorderSize.Width yOffset = -e.Y - SystemInformation.CaptionHeight - _ SystemInformation.FrameBorderSize.Height _mouseOffset = New Point(xOffset, yOffset) _isMouseDown = True End If ' cerrar el form pulsando el boton derecho del ratón If e.Button = MouseButtons.Right Then Me.Close() End If End Sub '3.Controlador de eventos para el evento MouseMove del formulario. ' Cuando se hace clic con el ' botón primario del mouse y se arrastra el mouse, la propiedad ' Location del formulario se establece en la nueva posición. Private Sub Form1_MouseMove( _ ByVal sender As Object, _ ByVal e As MouseEventArgs) Handles MyBase.MouseMove If _isMouseDown Then Dim mousePos As Point = Control.MousePosition mousePos.Offset(_mouseOffset.X, _mouseOffset.Y) Location = mousePos End If End Sub Private Sub Form1_MouseUp( _ ByVal sender As Object, _ ByVal e As MouseEventArgs) Handles MyBase.MouseUp ' Actualizar el valor de la variable [_isMouseDown] para que ' el formulario solo se mueva cuando el usuario este ' pulsando el boton izquierdo del ratón If e.Button = MouseButtons.Left Then _isMouseDown = False End If End Sub #End Region