2013-08-03 3 views
0

i ont une forme simple, sans frontière et sans barre de titre. Il n'y a qu'une seule étiquette sur le chronomètre. J'ai besoin de forme pour être mobile en cliquant sur la souris n'importe où sur le formulaire, puis faites glisser.Déplacer formulaire, cliquer sur l'étiquette vb.net

Je résolus, mais le problème est quand je clique sur le formulaire sur place occupée par l'étiquette, la forme ne se déplace pas. En d'autres termes, j'ai besoin de Label uniquement pour être vu, n'ayant aucune autre fonction. Comment puis-je faire un clic d'étiquette?

Répondre

1

Il est already an answer pour cela dans ce site, mais qui était en C#, donc je répète cette réponse ici mais traduit en VB.NET. Si vous pensez que cela est utile n'esitate la upvote qui répond aussi ....

La chose importante à noter ici est la manipulation du mousedown aussi pour le Label1 et non seulement pour la forme

Public Class Form1 

    <DllImportAttribute("user32.dll")> _ 
    Public Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Integer 
    End Function 

    <DllImportAttribute("user32.dll")> Public Shared Function ReleaseCapture() As Boolean 
    End Function 

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown, Label1.MouseDown 
     Const WM_NCLBUTTONDOWN As Integer = &HA1 
     Const HT_CAPTION As Integer = &H2 

     If e.Button = MouseButtons.Left Then 
      ReleaseCapture() 
      SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0) 
     End If 

    End Sub 
End Class 
+0

Merci pour votre réponse. En attendant, j'ai résolu le problème, de la même manière. J'ai juste ajouté des gestionnaires pour Label1 sur le code de Suad. – msosa

0

Bonjour j'ai une source d'exemple pour la forme mobile

Public Class Form1 
Dim drag As Boolean 
Dim mousex As Integer 
Dim mousey As Integer Private Sub 
Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown drag = True 
mousex = Windows.Forms.Cursor.Position.X - Me.Left 
mousey = Windows.Forms.Cursor.Position.Y - Me.Top 
End Sub Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove 
If drag Then 
Me.Top = Windows.Forms.Cursor.Position.Y - mousey 
Me.Left = Windows.Forms.Cursor.Position.X - mousex 
End If 
End Sub 
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 
Me.MouseUp`enter code here` 

J'espère que cela peut vous aider à

cheers :)

+0

Merci pour la réponse, mais ce n'est pas la réponse. J'ai déjà utilisé votre code pour rendre la forme mobile et la forme en mouvement n'est pas le problème. Le problème est qu'il ne bougera pas si je clique sur l'étiquette. – msosa

0
Public Class Form1 
Dim drag As Boolean 
Dim mousex As Integer 
Dim mousey As Integer 

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown, Label1.MouseDown 
    drag = True 
    mousex = Windows.Forms.Cursor.Position.X - Me.Left 
    mousey = Windows.Forms.Cursor.Position.Y - Me.Top 
End Sub 

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp, Label1.MouseUp 
    drag = False 
End Sub 

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove, Label1.MouseMove 
    If drag Then 
     Me.Top = Windows.Forms.Cursor.Position.Y - mousey 
     Me.Left = Windows.Forms.Cursor.Position.X - mousex 
    End If 
End Sub 
End Class 
Questions connexes