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

 

Autor: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

Deixe um comentário

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