J'ai un formulaire sans bordures que je voudrais que l'utilisateur puisse déplacer. Je n'ai pas réussi à trouver quelque chose qui me permette de le faire.
Est-il possible de déplacer une fenêtre dont la bordure est réglée sur Aucun ?
J'ai un formulaire sans bordures que je voudrais que l'utilisateur puisse déplacer. Je n'ai pas réussi à trouver quelque chose qui me permette de le faire.
Est-il possible de déplacer une fenêtre dont la bordure est réglée sur Aucun ?
Introduisez une variable booléenne qui indique si le formulaire est en cours de déplacement et des variables qui indiquent le point de départ du déplacement. Ensuite, OnMove déplace le formulaire en conséquence. Comme cette question a déjà été traitée ailleurs, je me contente de la copier-coller ici.
Class Form1
Private IsFormBeingDragged As Boolean = False
Private MouseDownX As Integer
Private MouseDownY As Integer
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
If e.Button = MouseButtons.Left Then
IsFormBeingDragged = True
MouseDownX = e.X
MouseDownY = e.Y
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseUp
If e.Button = MouseButtons.Left Then
IsFormBeingDragged = False
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
If IsFormBeingDragged Then
Dim temp As Point = New Point()
temp.X = Me.Location.X + (e.X - MouseDownX)
temp.Y = Me.Location.Y + (e.Y - MouseDownY)
Me.Location = temp
temp = Nothing
End If
End Sub
End Class
volé à http://www.dreamincode.net/forums/topic/59643-moving-form-with-formborderstyle-none/
Toutes les réponses "simples" en VB ont fait sauter mon formulaire dans tous les sens avec des écrans multiples. J'ai donc dérivé ceci de la même réponse en C# et cela fonctionne comme un charme :
Public Const WM_NCLBUTTONDOWN As Integer = 161
Public Const HT_CAPTION As Integer = 2
entonces
<DllImport("User32")> Private Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Integer
End Function
<DllImport("User32")> Private Shared Function ReleaseCapture() As Boolean
End Function
et enfin
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If (e.Button = MouseButtons.Left) Then
ReleaseCapture()
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0)
End If
End Sub
Dim offSetX As Integer
Dim offSetY As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Location = New Point(Cursor.Position.X - offSetX, Cursor.Position.Y - offSetY)
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
offSetX = PointToClient(Cursor.Position).X
offSetY = PointToClient(Cursor.Position).Y
Timer1.Enabled = True
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
Timer1.Enabled = False
End Sub
C'est une façon un peu débraillée de le faire xD
J'espère que cela vous aidera =]
Une autre façon de procéder consiste à traiter le WM_NCHITTEST
message . Cela vous permet de faire en sorte que certaines parties de votre formulaire répondent aux événements de la souris comme le feraient la barre de titre, les bordures, etc. dans une fenêtre avec des bordures. Par exemple, si vous avez une étiquette sur votre formulaire et que vous renvoyez la commande HTCAPTION
dans le WM_NCHITTEST
vous pourrez déplacer le formulaire en faisant glisser cette étiquette, tout comme vous pouvez déplacer une fenêtre ordinaire en la faisant glisser sur sa barre de titre. Voir ce qui suit Question sur Stack Overflow par exemple le code.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.