Você está na página 1de 11

Usando Formulários no VB

Qual a primeira coisa que o VB faz quando você inicia um projeto do tipo Standard
EXE ? Ele cria um formulário ( form1) inicial para sua aplicação. Embora
possamos criar aplicações Windows sem formulários, essa não é a regra geral. A
grande maioria das aplicações Windows utilizam formulários como base principal.

No VB não é diferente , você geralmente usa um formulário e nele inclui labels,


caixas de texto , caixas de combinação , frames , etc... Então você deve tratar com
carinho os formulários do seu projeto , e , fará isto se conhecer pelo menos as
propriedades básicas relacionadas aos formulários. Vamos lá...

Cuidando da aparência - BorderStyle

Podemos definir a aparência do nosso formulário usando a propriedade


BorderStyle. Abaixo temos os estilos possíveis:

0 - None
1 - Fixed Single
2 - Sizable
3 - Fixed Dialog
4 - Fixed Toolwindow
5 - Sizable Toolwindow

Vejamos um resumo de cada estilo:

0 - None - O formulário não possui : borda, barra


de título, botão para minimizar, maximizar ou
fechar. Por padrão o ícone do formulário não é
exibido na barra de tarefas. É utilizado para criar
telas de apresentação dentre outros usos.

1-Fixed Single - O formulário possui borda , barra


de titulo e o botão fechar. Não pode ser
redimensionado . Os botões Minimizar e
Maximizar podem ser incluidos através das
propriedades: MinButton e MaxButton.
2- Sizable - É o estilo padrão . O formulário
possui borda, barra de título, e todos os botões :
minimizar, maximizar e fechar. Pode ser
redimensionado .

3-Fixed Dialog - Formulário com borda , barra de


título e botão Fechar. Não pode ser
redimensionado . Seu icone não é exibido na
barra de tarefas.

4- Fixed ToolWindow - O Formulário possui a


barra de titulo e o botão fechar com um X menor.
Não pode ser redimensionado.

5- Sizable ToolWindow - O Formulário possui a


barra de titulo e o botão fechar com um X menor.
Pode ser redimensionado.

Propriedades de um Formulário

Veremos agora as principais propriedades de um formulário :

Propriedade Altera
Name O nome do formulário
Caption O texto da barra de título
BackColor A cor de fundo
ForeColor A cor das linhas desenhadas em tempo de execução
BorderStyle Já estudada acima
MaxButton Exibe o botão Maximizar
MinButton Exibe o botão Minimizar
MDIChild Comporta-se como um MDI Child (janela dentro de outra)
Moveable Se o formulário pode ser movido ou não
ShowInTaskbar Se o formulário irá ser exibido na barra de tarefas
StartUpPosition Onde o formulário será exibido inicialmente

Além destas propriedades os formulários também possuem métodos e eventos,


abaixo os principais:

Método Hide, Move, Paint, PrintForm, Refresh, SetFocus, Show


Eventos Activate, Click, DblClick, Deactivate, DragDrop, DragOver,
GotFocus, Load, LostFocus, MouseDown, MouseMove, Unload

Carregando, Exibindo e Escondendo um formulário

Para exibir um formulário usamos o método Show . Ele carrega o formulário na


memória e o exibe tornando-o visível. A sintaxe é a seguinte:

object.Show style, ownerform

- Object : no caso , o nome do formulário a ser exibido

- Style : Valor Inteiro que define se o formulário é modal ( 1 ou vbmodal) ou não


modal ( 0 ou modeless). Opcional

- Ownerform - String que define o componente pertence ao formulário exibido

Nota - Você sabe o que é um formulário modal ?

Um formulário Modal não deixa que o usuário passe de um formulário para outro na
mesma aplicação. A maioria das caixas de dialogo no Visual Basic são modais.
Quando um formulário modal é exibido, a aplicação gera um beep caso o usuário
clique fora do formulário modal.

Um formulário modeless (que é o padrão do VB ao usar o método Show) permite ao


usuário passar de um formulário para outro. Exemplos de formulário modeless no
Ambiente de Desenvolvimento do Visual Basic são as janelas Project, Properties,
Code e Formulários.

Private Sub cmdTeste_Click()

frmTeste.Show vbModal ‘ exibe o formulário como modal

End Sub

Lembre-se :

• Quando o método Show exibe um formulário não modal , o código


subsequente é executado .
• Quando Show exibe um formulário modal o código subsequente não é
executado até que o formulário seja descarregado ou escondido, e nenhuma
entrada quer via teclado ou mouse pode ocorrer exceto nos objetos do
formulário .
• Um formulário MDIForm não pode ser modal.
• O formulário inicial de uma aplicação é automaticamente exibido após o seu
evento Load ser invocado.

Para carregar um formulário na memória sem exíbí-lo usamos o evento Load .


Sintaxe:

Private Sub Form_Load( )


Private Sub MDIForm_Load( )

O evento Load é usualmente utilizado par incluir o código de inicialização do


formulário . ( carregar combos , definir variáveis usadas no formulário ,etc...).

O evento Load ocorre depois do evento Initialize.

Lembre-se:

• Quando você fizer referência a uma propriedade de um formulário não


carregado , o mesmo será automaticamente carregado , mas não exibido , a
não ser que a propriedade MDIChild estiver definida como True.
• Se um objeto MDIForm não estiver carregado e um formulário MDI Child
for carregado , ambos serão automaticamente carregados e exibidos.
• Ao criar procedures para eventos relacionados , como Activate, GotFocus ,
Paint e Resize , esteja ciente que as ações não irão conflitar e nem causar
efeitos recursivos.

Para descarregar um formulário usamos o evento Unload. Quando o formulário


for recarregado o conteúdo de todos os controles serão reinicilizados. A sua sintaxe
é:

Private Sub object_Unload(cancel As Integer)

Parte Descrição
Object No caso o formulário a ser removido.

Cancel Inteiro que determina se o formulário será removido. Se Cancel for


igual a 0 o formulário é removido caso contrário não.

Lembre-se :

• Se Cancel for definido como diferente de zero o formulário não será


removido , mas outros eventos não serão interrompidos. Ex: Sair do
Windows.
• O evento QueryUnload ocorre antes do evento Unload.
• O evento Unload ocorre antes do evento Terminate.

Nota: Voce sabe o que o evento QueryUnload ?

O evento QueryUnload ocorre antes de um formulário ou aplicação encerrar. Quando


um objeto MDIForm é encerrado este evento ocorre primeiro para o formulário MDI e
então para todos os formulários MDI Child. Se o evento QueryUnload não for
cancelado , o evento Unload ocorre primeiro para todos os formulários e então para o
formulário MDI. Sua sintaxe é:

Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)


Para esconder um formulário sem descarregá-lo da memória usamos o evento
HIDE. A sintaxe é :
Object.Hide

• Quando um formulário é escondido ( Hide ) ele é removido da tela e sua


propriedade Visible é definida como False. Os controles de um formulário
escondido não estão acessíveis ao usuário , mas, estão disponíveis para a
aplicação que esta sendo executada.

Vejamos um resumo das tarefas envolvendo os eventos discutidos:

Tarefa Método ou função


Carregar um formulário na memória, Use o comando LOAD, ou faça uma referencia
mas não exibi-lo ou a uma propriedade ou controle no
formulário
Carregar e exibir um formulário Use o método SHOW
Exibir um formulário carregado Use o método SHOW
Esconder um formulário Use o método HIDE
Esconder um formulário e descarrega- Use o comando UNLOAD
lo da memória

Vejamos um exemplo de utilização dos eventos mencionados, em um procedimento


que inicia um aplicativo:

Sub Main()

Load frmPrincipal ‘Carrega para a memória o Formulário principal

Load frmRegistro ‘Carrega para a memória o Formulário de registro

‘Define que o formulário será exibido maximizado

frmPrincipal.WindowState = vbMaximized

frmPrincipal.Show ‘Exibe o formulário

End Sub

Lembre-se :

• Ao usar o método Hide para esconder um formulário ele não é removido da


memória. Se você usar o método Show novamente todos os controles do
formulário estarão exibindo os mesmos valores.
• Para remover um formulário da memória use o método Unload. Para
conservar valores dos controles você pode salvá-los em variáveis que
poderão ser acessadas novamente quando o formulário for carregado
novamente.
• Usar o comando End não é uma boa prática pois encerra sua aplicação , e ,
nem sempre libera a memória usada.
• Quando voce descarrega um formulário usando o método Unload , os
eventos QueryUnload e Unload do formulário são disparados. Para
cancelar a descarga do formulário basta definir Cancel = -1 . Para saber
como o formulário esta sendo descarregado você pode checar o valor de
UnloadMode: (Veja abaixo)

Constante Descrição
vbAppTaskManager (3) O gerenciador de Tarefas do Windows esta fechando a aplicação.
vbAppWindows (2) Fechamento da sessão atual do Windows.
vbFormCode (1) O método Unload foi invocado pelo código
O usuário escolheu o comando Close do menu Box de um formulário, ou clico
vbFormControlMenu (0)
botão X.
O formulário MDI child esta fechando pois o formulário MDI form esta sendo
vbFormMDIForm (4)
fechado.
vbFormOwner (5) O proprietário do formulário está fechado.

Carregando, Exibindo e Escondendo um formulário

Posicionar o seu formulário ficou mais fácil a partir da versão 5.0 do VB. Para
centralizar um formulário na Versão 3.0 e na versão 4.0 usávamos o código
abaixo , geralmente no evento Load do form.

Left = (Screen.Width - Width )


/2

Top = (Screen.Height -
Height ) / 2

A posição inicial pode ser facilmente configurada através das seguintes


propriedades:

0 - Manual (voce define a posição inicial através das propriedades Top e Left.)
1 - Center Screen (o formulário aparece no centro da tela.)
2 - Center Owner (O formulário aparece no centro da janela do qual ele é
exibido.)
3 - Windows Default (O formulário aparece na posição padrão.)

Além disso podemos configurar também se o formulário será exibido Maximizado ,


minimizado ou na forma normal. Para isto usamos propriedade WindoState ,
assim:

0 - Normal 1 - Minimizado 2-
Maximizado

Coleções de Formulários

Uma coleção é um agrupamento de itens relacionados. O VB possui a coleção


Forms que é composta por todos os formulários da aplicação. Através da coleção
forms podemos rastrear múltiplos formulários.

Cada formulário em nossa aplicação possui uma coleção de controles embutida , e ,


você pode usar a coleção de controles em tempo de execução para ter acesso aos
controles em um formulário sem precisar saber o nome de cada controle ou mesmo
o tipo do controle. Tudo já esta pronto , você não precisar declarar nada , pois o VB
monta e mantêm a coleção enquanto você desenha o formulário : incluindo e/ou
excluindo controles do mesmo.

Aonde você pode usar toda esta teoria ??? Bem , que tal na entrada de dados
usando formulários !!! Assim você pode escrever uma rotina genérica que pesquise
a coleção de controles procurando por controles relacionados com os dados que
você quer usar e alterar suas propriedades.

Você pode acessar a coleção de controles através da propriedade Controls de um


formulário. Esta propriedade é um vetor (array) de variáveis objeto , onde cada
elemento do vetor é um controle; o elemento 0 é o primeiro controle , o elemento 1
, o segundo , e por ai vai...

Assim se tivermos duas caixas de texto (TextBox) teremos:

Form1.Controls(0).text = " Controle 0 "


Form1.Controls(1).text = " Controle 1

Lembre-se :

• Você pode usar a coleção Forms para interagir com todos os formulários
criados na aplicação
• Existe um tipo especial de formulário - MDI Form - que contém outros
formulários chamados MDI Childs. Um Form MDI é criado através do Menu
Project|Add MDI Form e um MDI Child é criado definindo a propriedade
MDIChild do formulário como True
• Você pode criar múltiplas instâncias de um formulário via código através da
palavra chave New . Veja código abaixo:

Public formularios As New Collection

Private Sub Command1_Click()


Dim NovoForm As New Form1
Static intnumero As Integer

intnumero = intnumero + 1
NovoForm.Caption = "Formulário # " & intnumero
NovoForm.BackColor = QBColor(intnumero)
formularios.Add NovoForm
NovoForm.Show
End Sub
Neste código primeiro um objeto da coleção formulários e no evento Click do botão
de comando declaramos a variável NovoForm do tipo Form1 usando a palavra New
, isto criará uma nova instância de form1. Definimos as propriedades Caption e
BackColor para cada instância afim de diferenciar os formulários. Abaixo o resultado
quando o usuário clica no botão - Criar Novo Formulário.

O novo formulário é uma cópia de form1 e essa nova instância é adicionada a


coleção formulários.

Para acessar os formulários via coleção Forms podemos usar o seguinte código:

Dim I as integer

For I = 0 To formularios.Count
Debug.Print Forms(I).Caption
Next I

Para acessar os controles de um formulário usamos a coleção Controls. Assim


para esconder todos os controles de um formulário , fazemos:

For Each Control in


Form1.Controls
Control.Visible = False
Next Control

Assim , para descarregar todos os formulários de uma aplicação podemos usar o


seguinte código:

For I = 0 To formularios.Count-1
unload Forms(I)
Next I

Ou, podemos usar o código abaixo em uma função para saber se determinado
formulário esta carregado ou não:

Private Function ProcuraForm(ByVal form_name


As String) As Form
Dim i As Integer

Set ProcuraForm = Nothing

' Procura pelos forms carregados.


For i = 0 To Forms.Count - 1
If Forms(i).Name = form_name Then
'se encontramos retorna o form.
Set ProcuraForm = Forms(i)
Exit For
End If
Next i
End Function

MDIForm e MDI Child

Um MDI (Multiple-document-interface) form é uma janela que atua como um pando


de fundo de uma aplicação e é o container para os formulários que têm a
propriedade MDI Child definida como True.

Uma aplicação pode ter somente um objeto MDIForm e muitos formulários MDI
Child .Se um formulário MDI tiver um menu o menu do formulário MDI Child irá
substituí-lo quando estiver ativo. Ao minimizar um formulário MDI ele será exibido
como um ícone dentro do MDIForm. Veja figuras abaixo:

MDIForm MDI Child Os ícones do MDI e MDI Child

Ao executar o projeto o MDI Form exibe o seu menu. Quando ativamos o MDI
Child o menu do MDI Form é substituido pelo do MDIChild.

MDIForm com menu MDI Child ativado - o seu menu substitui o do MDIForm

Lembre-se :

• UM objeto MDIForm pode conter somente: Menu , PictureBox , Toolbar e


controles que tiverem a propriedade Align.
• Para inserir outros controles neste tipo de formulário você deve inserir um
controle picture box e então inserir neste controle os demais controles.
(ãããã...? )
• Um formulário MDIForm não pode ser modal.
• Os formulários MDI Child são independentes do MDIForm , mas sempre
estarão contidos nele.
• Podemos acessar uma coleção de controles em um formulário MDIForm
usando a coleção Controls. Assim para esconder todos os controles em um
formulário MDIForm , fazemos:

For Each Control in MDIForm1.Controls


Control.Visible = False
Next Control

Desabilitando o botão Fechar (Close - X ) via código

Podemos desabilitar o X do botão Fechar. Vamos fazer este serviço usando uma
API, veja abaixo:

• Insira este código no formulário padrão

Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long,


ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As
Long, ByVal bRevert As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub Form_Load()


'// desabilita o botão fechar
RemoveMenus
End Sub

Private Sub RemoveMenus()


Dim hMenu As Long
hMenu = GetSystemMenu(hWnd, False)
DeleteMenu hMenu, 6, MF_BYPOSITION
End Sub

Ao executar o projeto devemos obter o seguinte resultado:

Acessando controles de um formulário a partir de outro


formulário

Acessar os controles de um formulário a partir de outro formulário é uma tarefa


muito simples , é só você informar o nome do formulário antes do nome do
controle que quer acessar. Vamos supor que você tenha dois formulários : form1 e
form2 e que no formulário form1 você tenha um controle Text1 e no formulário
um outro controle Text1.

Suponha que você esteja com o formulário form1 carregado , para acessar o
controle Text1 do formulário form1 fazemos:

msgbox text1.text ou msgbox me.text1.text


Para acessar o controle Text1 do formulário form2 que não esta carregado
fazemos:

msgbox form2.text1.text
A mesma regra vale quando você quer alterar as propriedades de algum controle
presente em outro formulário.

Obs: Se o formulário form2 não estiver carregado o VB irá carregá-lo acessar ou


alterar as propriedades dos controles mas não vai exibir o formulário ; você verá as
mudanças somente quando carregar o formulário.

- Minimizando todos os formulários :

copie o código abaixo em um módulo no seu projeto e chame a função -


MinimizarForms()

public sub MinimizarForms()


dim objTemp as object

for each objTemp in forms


objTemp.windowstate = 1
next
end sub

- Descarregar todos os formulários:

Copie o código abaixo no evento Query_Unload do seu formulário

dim ret as object

for each ret in forms


unload ret
set ret = nothing
next

Agora acabei ... Até mais ver

Copyright (c) 2001 - José Carlos Macoratti e amigos (Toda a Web)