Visual Basic.NET - Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

 
Vista:
sin imagen de perfil

Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

Publicado por dennis (2 intervenciones) el 22/09/2016 22:40:03
Buenas comunidad, gracias por leer mi Tema.

Estoy llevando a cabo mi proyecto final en Visual Studio 2013 con el lenguaje Visual Basic,
mi proyecto deseo que no tenga los marcos de windows, por eso use la propiedad de windows form
- FormBorderStyle en "none"

Por ello acudo a ustedes para que me ayuden con alguna forma de poder programar el arrastre de la ventana desde otra parte.

Gracias.

MenuVendedor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

Publicado por Miguel (476 intervenciones) el 23/09/2016 03:15:45
Hola,
Usa el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.       [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
        private static extern void ReleaseCapture();
 
        [DllImport("user32.DLL", EntryPoint = "SendMessage")]
        private static extern void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
 
        private const int WM_NCLBUTTONDOWN = 161;
 
        private const int HTCAPTION = 2;
 
        private void moverForm(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
            }
        }


Para emplearlo sólo lo llamas desde el evento MouseDown (del Form u otro control) y listo.



Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

Publicado por dennis (2 intervenciones) el 21/12/2016 15:23:23
Buenas, gracias por el código. A pesar de que es para C# acabo de usarlo.
El código para Visual Basic que use es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Inherits System.Windows.Forms.Form
 
    Private Const WM_SYSCOMMAND As Integer = &H112&
    Private Const MOUSE_MOVE As Integer = &HF012&
 
    <System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint:="ReleaseCapture")> _
    Private Shared Sub ReleaseCapture()
    End Sub
 
    <System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint:="SendMessage")> _
    Private Shared Sub SendMessage( _
            ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
            ByVal wParam As Integer, ByVal lParam As Integer _
            )
    End Sub
 
    Private Sub moverForm()
        ReleaseCapture()
        SendMessage(Me.Handle, WM_SYSCOMMAND, MOUSE_MOVE, 0)
    End Sub
 
    Private Sub MenuPrincipal_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
                    Handles MyBase.MouseMove
        If e.Button = MouseButtons.Left Then
            moverForm()
        End If
    End Sub

Espero a alguien le ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 22/12/2016 15:58:16
Mas sencillo sin invocar la API Windows, puedes hacerlo como te indican aquí:


Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como programar "arrastrar" de un WindowsForm sin FormBorderStyle

Publicado por Lizy (18 intervenciones) el 10/12/2021 16:13:47
' Creo que así es la forma más simple
' Colocar un Panel en el Form
' Copiar este codigo y se podrá mover el Form y el Panel con el mouse

Option Strict On

Public Class Form1

Dim MVE As Boolean = False
Dim Xobj As Single, Yobj As Single
Dim Xfrm As Single, Yfrm As Single

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Dim CTRL As Control

Private Sub Mueve_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown, Panel1.MouseDown
CTRL = CType(sender, Control)

If e.Button = MouseButtons.Left Then
CTRL.BringToFront()

Xobj = e.X
Yobj = e.Y

MVE = True
End If
End Sub

Private Sub Mueve_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove, Panel1.MouseMove
CTRL = CType(sender, Control)

If MVE = True Then
If e.Button = MouseButtons.Left Then

Xfrm = e.X + CTRL.Left
Yfrm = e.Y + CTRL.Top

CTRL.Left = CInt(Xfrm - Xobj)
CTRL.Top = CInt(Yfrm - Yobj)

CTRL.Refresh()
Application.DoEvents()
End If
End If

End Sub

Private Sub Mueve_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp, Panel1.MouseUp
MVE = False
End Sub

End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar