Переместить форму, щелкнуть ярлык vb.net

у меня есть простая форма без рамки и без строки заголовка. На нем только одна этикетка с секундомером. Мне нужно, чтобы форма была подвижной, щелкнув мышью в любом месте формы, а затем перетащив ее.

Я решил это, но проблема в том, что когда я нажимаю на форму в месте, занятом ярлыком, форма не перемещается. Другими словами, мне нужно, чтобы Label был виден, не имея никакой другой функции. Как сделать так, чтобы метка кликала?


person msosa    schedule 03.08.2013    source источник


Ответы (2)


На этом сайте уже есть ответ на этот вопрос, но это было в C#, поэтому я повторяю этот ответ здесь, но переведенный в VB.NET. Если вы считаете, что это полезно, не оценивайте и этот ответ....

Здесь важно отметить обработку нажатия кнопки мыши также для Label1, а не только для формы.

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
person Steve    schedule 03.08.2013
comment
Спасибо за ответ. Тем временем я решил проблему аналогичным образом. Я только что добавил обработчики для Label1 в код Suad. - person msosa; 03.08.2013

Здравствуйте, у меня есть пример источника, чтобы сделать форму подвижной.

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`

Я надеюсь это тебе поможет

Ваше здоровье :)

person Suad Halilovic    schedule 03.08.2013
comment
Спасибо за ответ, но это не ответ. Я уже использовал ваш код, чтобы сделать форму подвижной, и сама движущаяся форма не является проблемой. Проблема в том, что он не будет двигаться, если я нажму на ярлык. - person msosa; 03.08.2013