3

ユーザーが移動できるようにしたい境界線のないフォームがあります。そうすることを可能にするものを見つけることができませんでした。

境界線がなしに設定されているウィンドウを移動することはできますか?

4

4 に答える 4

11

フォームが現在ドラッグされている場合の状態を保持するブール変数と、ドラッグの開始点を保持する変数を導入します。次に、OnMove はそれに応じてフォームを移動します。これはすでに他の場所で回答されているので、ここにコピーして貼り付けます。

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

http://www.dreamincode.net/forums/topic/59643-moving-form-with-formborderstyle-none/から盗みました

于 2013-06-30T15:52:39.887 に答える
1

これを行う別の方法は、WM_NCHITTEST メッセージを処理することです。これにより、フォームの一部をマウス イベントに応答させることができます。これは、タイトル バーや境界線など、境界線のあるウィンドウの場合と同様です。たとえば、フォームにラベルがありHTCAPTIONWM_NCHITTESTハンドラーに戻る場合、タイトル バーをドラッグして通常のウィンドウを移動できるのと同じように、このラベルをドラッグしてフォームを移動できます。コード例については、このスタック オーバーフローの質問を参照してください。

于 2013-06-30T16:03:56.947 に答える
1
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

これは少しだらしない方法です xD

それが役立つことを願っています =]

于 2013-06-30T15:55:50.133 に答える