How to move form without form border (visual studio)

后端 未结 9 2020
无人共我
无人共我 2020-12-09 13:38

I am making a windows form application in visual studio 2013 Express. In order to make the application look more customized and attractive, I designed the forms in my applic

相关标签:
9条回答
  • 2020-12-09 13:47

    a late answer but there is an alternative we can use example you have a form lets name it Form1

    In Design View

    • do not hide the border from the property menu do it in code
    namespace Project
    {
        public partial class Form1: Form
        {
                InitializeComponent();
                 this.DoubleBuffered = true; //disable flickers
                this.Text = string.Empty;
                this.ControlBox = false;
                this.MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea;
        }
    
      //Drag Form
            [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
            private extern static void ReleaseCapture();
            [DllImport("user32.DLL", EntryPoint = "SendMessage")]
    
            private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
    //mousedown on where ever u wanna use the moving of form function in
      private void topPanel_MouseDown(object sender, MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(this.Handle, 0x112, 0xf012, 0);
            }
    }
    

    now when you will run the code your form will look something like this:

    when application is executed

    now when u hold down your mouse at the pink bar and drag it around it should work.

    0 讨论(0)
  • 2020-12-09 13:48

    'this is Best way

    Dim Pos As Point
    Private Sub Panel1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Me.Location += Control.MousePosition - Pos
        End If
        Pos = Control.MousePosition
    End Sub
    
    0 讨论(0)
  • 2020-12-09 13:50

    Try this:

    Public Const WM_NCLBUTTONDOWN As Integer = &HA1 
    Public Const HT_CAPTION As Integer = &H2 
    
    <DllImportAttribute("user32.dll")> _ 
    Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    End Function
    
    <DllImportAttribute("user32.dll")> _ 
    Public Shared Function ReleaseCapture() As Boolean
    End Function
    
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown, Panel1.MouseDown 
        If e.Button = Windows.Forms.MouseButtons.Left Then
            ReleaseCapture() 
            SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0) 
        End If
    End Sub
    

    It uses the Windows API calls to tell the window that the user is holding the window. As you can see is attached to the Form MouseDown event, but you can use any control you want to use to drag the form.

    0 讨论(0)
  • 2020-12-09 13:50

    This method seems nice and simple...

    Const WM_NCHITTEST As Integer = &H84
    Const HTCLIENT As Integer = &H1
    Const HTCAPTION As Integer = &H2
    
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Select Case m.Msg
            Case WM_NCHITTEST
                MyBase.WndProc(m)
                If m.Result = IntPtr.op_Explicit(HTCLIENT) Then m.Result = IntPtr.op_Explicit(HTCAPTION)
            Case Else
                MyBase.WndProc(m)
        End Select
    End Sub
    
    0 讨论(0)
  • 2020-12-09 13:52
    1. Adjust FormBorderStyle property to None
    2. Add label control to your form
    3. Set Label Dock property to Top
    4. Copy and paste the following code into your code editor window

      Dim firstX As Integer
      Dim firstY As Integer
      Dim lbuttonDown As Boolean
      
      Private Sub Label1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
          If e.Button = Windows.Forms.MouseButtons.Left Then
              lbuttonDown = True    
              firstX = e.X
              firstY = e.Y
          End If
      End Sub
      
      Private Sub Label1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp
          If e.Button = Windows.Forms.MouseButtons.Left Then
              lbuttonDown = False
          End If
      End Sub
      
      Private Sub Label1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
          If lbuttonDown Then
              Me.Left = -firstX + PointToScreen(e.Location).X
              Me.Top = PointToScreen(e.Location).Y
          End If
      End Sub
      
    0 讨论(0)
  • 2020-12-09 14:01

    If you want to move the form with click on one picture you can use:

    Dim drag As Boolean
    Dim mousex As Integer
    Dim mousey As Integer
    
    Private Sub Picturebox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        drag = True 'Sets the variable drag to true.
        mousex = Cursor.Position.X - Me.Left 'Sets variable mousex
        mousey = Cursor.Position.Y - Me.Top 'Sets variable mousey
    End Sub
    
    Private Sub Picturebox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        'If drag is set to true then move the form accordingly.
        If drag Then
            Me.Top = Cursor.Position.Y - mousey
            Me.Left = Cursor.Position.X - mousex
        End If
    End Sub
    
    Private Sub Picturebox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        drag = False 'Sets drag to false, so the form does not move according to the code in MouseMove
    End Sub
    
    0 讨论(0)
提交回复
热议问题