ユーザーが移動できるようにしたい境界線のないフォームがあります。そうすることを可能にするものを見つけることができませんでした。
境界線がなしに設定されているウィンドウを移動することはできますか?
ユーザーが移動できるようにしたい境界線のないフォームがあります。そうすることを可能にするものを見つけることができませんでした。
境界線がなしに設定されているウィンドウを移動することはできますか?
フォームが現在ドラッグされている場合の状態を保持するブール変数と、ドラッグの開始点を保持する変数を導入します。次に、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/から盗みました
これを行う別の方法は、WM_NCHITTEST
メッセージを処理することです。これにより、フォームの一部をマウス イベントに応答させることができます。これは、タイトル バーや境界線など、境界線のあるウィンドウの場合と同様です。たとえば、フォームにラベルがありHTCAPTION
、WM_NCHITTEST
ハンドラーに戻る場合、タイトル バーをドラッグして通常のウィンドウを移動できるのと同じように、このラベルをドラッグしてフォームを移動できます。コード例については、このスタック オーバーフローの質問を参照してください。
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
それが役立つことを願っています =]