Movendo form sem borda

Geralmente quando definimos um layout diferenciado para uma aplicação Windows, nós necessitamos tratar os formulários e para combinar cores podemos definir o formulário sem bordas e criar uma borda mais trabalhada para a aplicação, arredondada ou simplesmente com uma cor diferenciada.

O problema é que quando definimos um formulário sem a title bar e necessitamos do movimento do formulário.

Para corrigir isso basta utilizar o evento mouse move, abaixo vou descrever as partes do código.

 

  Private pPermiteMover As Boolean = False

  Private pMouseX As Integer = 0

  Private pMouseY As Integer = 0

 

  Private Sub Form1_MouseDown(ByVal sender As Object, _

                              ByVal e As System.Windows.Forms.MouseEventArgs) _

                                Handles Me.MouseDown

    If e.Button = MouseButtons.Left Then pPermiteMover = True : pMouseX = e.X : pMouseY = e.Y

  End Sub

 

A variável pPermiteMover terá o valor igual a verdadeiro quando acontecer o evento MouseDown através do botão esquerdo do mouse e nesse caso também irá atribuir o valor da posição X do cursor para a variável pMouseX e Y para a variável pMouseY.

 

  Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove

    If pPermiteMover = True Then

      Dim lPosicaoAtual As Point = New Point()

      lPosicaoAtual.X = Me.Location.X + (e.X – pMouseX)

      lPosicaoAtual.Y = Me.Location.Y + (e.Y – pMouseY)

      Me.Location = lPosicaoAtual

      lPosicaoAtual = Nothing

    End If

  End Sub

 

O evento mouse move, verifica se é permitido mover e atribui a variável lPosicaoAtual os pontos somados através da localização atual e a subtração da posição do eixo X e Y com o pMouseX e Y.

 

  Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp

    If e.Button = MouseButtons.Left Then

      pPermiteMover = False

    End If

  End Sub

 

Já no evento MouseUp, que verifica se o botão é o esquerdo e se for atribuí o valor falso para o variável que permite mover o formulário.

Esse código permite mover o formulário inteiro, porém se foi criado uma title bar personalizada será necessária colocar esse código no componente utilizado para formar a nova title bar.

Para fazer o teste  basta copiar e colar o código abaixo.

 

Public Class Form1

 

#Region “Move Formulário”

 

  Private pPermiteMover As Boolean = False

  Private pMouseX As Integer = 0

  Private pMouseY As Integer = 0

 

  Private Sub Form1_MouseDown(ByVal sender As Object, _

                              ByVal e As System.Windows.Forms.MouseEventArgs) _

                                Handles Me.MouseDown

    If e.Button = MouseButtons.Left Then pPermiteMover = True : pMouseX = e.X : pMouseY = e.Y

  End Sub

 

  Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove

    If pPermiteMover Then

      Dim lPosicaoAtual As Point = New Point()

      lPosicaoAtual.X = Me.Location.X + (e.X – pMouseX)

      lPosicaoAtual.Y = Me.Location.Y + (e.Y – pMouseY)

      Me.Location = lPosicaoAtual

      lPosicaoAtual = Nothing

    End If

  End Sub

 

  Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp

    If e.Button = MouseButtons.Left Then

      pPermiteMover = False

    End If

  End Sub

 

#End Region

 

 

End Class

 

Abraço, Rodrigo

 

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s