VB 2005 - Tarefas básicas com formulários


1- Interceptando entradas do teclado

Você possui um formulário que precisa observar certos eventos de pressionamento de teclas para em seguida processá-los antes que qualquer controle no formulário reconheça estas teclas.

Uma forma de contornar este problema é usar a propriedade KeyPreview do formulário para controlar o acesso aos eventos KeyDown, KeyUp e KeyPress do formulário.

Neste caso é mais fácil mostrar do que falar...

Crie um novo projeto no VB 2005 Express do tipo Windows Forms e inclua no formulário padrão , form1.vb , o controle TextBox chamado TextBox1.

A seguir defina a propriedade KeyPreview do formulário para o valor igual a True e inclua o seguinte código no formulário:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
     If (e.KeyCode = Keys.F5) Then MessageBox.Show("Formulário : pressionou F5")
     e.Handled = True
End Sub

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
     If (e.KeyCode = Keys.F5) Then MessageBox.Show("TextBox : pressionou F5")
End Sub

Vamos agora efetuar os seguintes testes:

1 - Execute o projeto e pressione a tecla F5.

Você receberá somente a mensagem : "Formulário : pressionou F5"

2 - Comente a linha de código e.Handled = True e execute o projeto novamente.

Você deverá receber as duas mensagens : "Formulário : pressionou F5" e em seguida "TextBox : pressionou F5"

3- Agora defina a propriedade do formulário KeyPreview como sendo igual a False e execute o projeto.

Somente a mensagem : "TextBox : pressionou F5" será exibida

O comportamento padrão do formulário é ignorar todas entradas de teclas sempre que um controle no formulário tiver o foco.

Para alterar este comportamento basta definir a propriedade KeyPreview para True. Ao fazer isto o programa envia todas as entradas do teclado primeiro para o tratador de eventos do formulário e em seguida as envia para o controle ativo.

A interrupção do processo a nível de formulário é feita pela definição da propriedade e.Handled como sendo igual a True nos eventos de tratamento do formulário.

2- Interagindo com os controles do formulário

A classe Form mantém uma coleção de todos os controles existentes no formulário e você pode interagir com estes controles percorrendo a coleção , verificando qual o controle você deseja acessar/alterar e efetuar a sua ação.

Vejamos um exemplo:

Crie um novo projeto do tipo Windows Application e inclua no formulário padrão , form1.vb, três controles labels e dois controles Button conforme a figura abaixo:

Agora inclua o código abaixo no evento Click do botão Colorir

Private Sub btnColorir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColorir.Click
' ----- Define a cor de fundo de todas a labels como sendo vermelha
AtualizaCorLabels(Color.Red)
End Sub

Inclua também este trecho de código no evento click do botão Normal:

Private Sub btnNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNormal.Click
' ----- Define a cor de fundo de todas a labels como normal
AtualizaCorLabels(SystemColors.Control)
End Sub

Para finalizar digite o código da rotina AtualizaCorLabels conforme a seguir:

Private Sub AtualizaCorLabels(ByVal cor As Drawing.Color)
' ----- Percorre todos os controles procurando por Labels
For Each Controle As Control In Me.Controls
   If (TypeOf Controle Is Label) Then
         Controle.BackColor = cor
   End If
Next Controle

End Sub

Todos os controles do formulário aparecem na coleção acessada através da propriedade Controls do formulário. Por ser uma coleção padrão você pode percorre-la através de uma instrução For/Each.

Você também pode referenciar um controle pelo seu nome: Dim botao = Me.Controls ("btnNormal)

Para determinar o tipo de controle que você deseja procurar usamos a instrução TypeOf.

3- Centralizando um formulário

Para centralizar um formulário basta definir sua propriedade StartPosition como sendo igual a CenterScreen.

Para o obter o mesmo resultado via código faça o seguinte:

Me.Location = New Point(( Screen.PrimaryScreen.Bounds.Width - Me.Width) / 2, (Screen.PrimaryScreen.Bounds.Height - Me.Height) / 2)

4- Fazendo o formulário desaparecer aos poucos

Para obter o efeito de fazer o formulário desaparecer aos poucos até sumir ( fade out) podemos usar a propriedade Opacity do formulário:

Crie um novo projeto do tipo Windows Application e inclua no formulário padrão , form1.vb, um botão de comando.

A seguir inclua o seguinte código no evento Click do botão de comando:

Private Sub btnDesvanecer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDesvanecer.Click
' ----- Faz o formulário desvanecer
Dim contador As Integer

For contador = 90 To 10 Step -1
   Me.Opacity = contador / 100
   Me.Refresh()
   Threading.Thread.Sleep(60)
Next contador

Me.Close()
End Sub

5- Determinar se um controle em um formulário pode receber o foco

Para saber se um controle pode receber o foco você  pode usar o método CanFocus() da 
If (SeuControle.CanFocus() = True) Then

    SeuControle.Focus()

endif

6- Fazendo o seu formulário aparecer sobre os demais

Se você deseja que um formulário específico apareça no topo sobre todos os demais formulários, não importando qual formulário esta selecionado, basta definir a propriedade TopMost do formulário como igual a True.

7- Simulando um Clik em um botão via código

Para iniciar uma ação de Clicar em um botão usando o evento Click você pode usar o método PerformClick() do botão:

Button1.PerformClick()

8- Criando menus de contexto no formulário
Podemos criar menus de contexto no formulário usando o controle ContextMenuStrip.

Abra o VB 2005 Express e crie um novo projeto Windows Application e inclua no formulário um controle ContextMenuStrip nomeando-o menuAtalho conforme a figura abaixo.

Quando você incluir o controle no formulário será criado um menu temporário que você deve alterar informando suas opções.  Inclua 3 itens no menu :  Salvar Dados, Enviar Email e Sair.

A seguir selecione o formulário e altere a propriedade ContextMenuStrip para menuAtalho:

A seguir inclua o seguinte código referente as duas primeiras opções do menu:

Private Sub Opção1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Opção1ToolStripMenuItem.Click

    MsgBox("Salvar Dados")

End Sub

Private Sub EnviarEmailToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnviarEmailToolStripMenuItem.Click

     MsgBox("Enviar Email")

End Sub

Execute o programa e clique com o botão direito do mouse sobre o formulário para ver o menu de contexto e as opções criadas:

Até o próximo artigo VB.NET ...


José Carlos Macoratti