Você está na página 1de 16

Qual a primeira coisa que o VB faz quando voc inicia um projeto do

tipo Standard EXE ? Ele cria um formulrio ( form1) inicial para sua
aplicao. Embora possamos criar aplicaes Windows sem
formulrios, essa no a regra geral. A grande maioria das aplicaes
Windows utilizam formulrios como base principal.
No VB no diferente , voc geralmente usa um formulrio e nele
inclui labels, caixas de texto , caixas de combinao , frames , etc...
Ento voc deve tratar com carinho os formulrios do seu projeto ,
e , far isto se conhecer pelo menos as propriedades bsicas
relacionadas aos formulrios. Vamos l...

Cuidando da aparncia - BorderStyle


Podemos definir a aparncia do nosso formulrio usando a
propriedade BorderStyle. Abaixo temos os estilos possveis:
0Non
e
1Fixe
d
Singl
e
2Siza
ble
3Fixe
d
Dial
og
4Fixe
d
Tool
win
dow
5Siza
ble
Tool
win
dow

Vejamos um resumo de cada estilo:


0 - None - O
formulrio no
possui : borda,
barra de ttulo,
boto para
minimizar,
maximizar ou
fechar. Por padro
o cone do
formulrio no
exibido na barra
de tarefas.
utilizado para
criar telas de
apresentao
dentre outros
usos.

1-Fixed Single - O
formulrio possui
borda , barra de
titulo e o boto
fechar. No pode
ser
redimensionado .
Os botes
Minimizar e
Maximizar podem
ser incluidos
atravs das
propriedades:
MinButton e
MaxButton.
2- Sizable - o
estilo padro . O
formulrio possui
borda, barra de
ttulo, e todos os
botes :
minimizar,
maximizar e
fechar. Pode ser
redimensionado .

3-Fixed Dialog Formulrio com


borda , barra de
ttulo e boto
Fechar. No pode
ser
redimensionado .
Seu icone no
exibido na barra
de tarefas.
4- Fixed
ToolWindow - O
Formulrio possui
a barra de titulo e
o boto fechar
com um X menor.
No pode ser
redimensionado.
5- Sizable
ToolWindow - O
Formulrio possui
a barra de titulo e
o boto fechar
com um X menor.
Pode ser
redimensionado.

Propriedades de um Formulrio
Veremos agora as principais propriedades de um formulrio :
Propriedade

Altera

Name

O nome do formulrio

Caption

O texto da barra de ttulo

BackColor

A cor de fundo

ForeColor

A cor das linhas desenhadas em tempo de execuo

BorderStyle

J estudada acima

MaxButton

Exibe o boto Maximizar

MinButton

Exibe o boto Minimizar

MDIChild

Comporta-se como um MDI Child (janela dentro de outra)

Moveable

Se o formulrio pode ser movido ou no

ShowInTaskbar

Se o formulrio ir ser exibido na barra de tarefas

StartUpPosition Onde o formulrio ser exibido inicialmente

Alm destas propriedades os formulrios tambm possuem mtodos e


eventos, abaixo os principais:
Mtodo
Eventos

Hide, Move, Paint, PrintForm, Refresh, SetFocus, Show


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

Carregando, Exibindo e Escondendo um formulrio

Para exibir um formulrio usamos o mtodo Show . Ele carrega o


formulrio na memria e o exibe tornando-o visvel. A sintaxe a
seguinte:
object.Show style, ownerform

- Object : no caso , o nome do formulrio a ser exibido


- Style : Valor Inteiro que define se o formulrio modal ( 1
ou vbmodal) ou no modal ( 0 ou modeless). Opcional
- Ownerform - String que define o componente pertence ao
formulrio exibido
Nota - Voc sabe o que um formulrio modal ?
Um formulrio Modal no deixa
que o usurio passe de um
formulrio para outro na mesma
aplicao. A maioria das caixas de
dialogo no Visual Basic so
modais. Quando um formulrio
modal exibido, a aplicao gera
um beep caso o usurio clique fora
do formulrio modal.
Um formulrio modeless (que o
padro do VB ao usar o mtodo
Show) permite ao usurio passar
de um formulrio para outro.
Exemplos de formulrio modeless
no Ambiente de Desenvolvimento
do Visual Basic so as
janelas Project, Properties, Code
e Formulrios.
Private Sub cmdTeste_Click()

frmTeste.Show vbModal

exibe o formulrio como modal


End Sub

Lembre-se :
Quando o mtodo Show exibe um formulrio no modal , o
cdigo subsequente executado .
Quando Show exibe um formulrio modal o cdigo subsequente
no executado at que o formulrio seja descarregado ou
escondido, e nenhuma entrada quer via teclado ou mouse pode
ocorrer exceto nos objetos do formulrio .
Um formulrio MDIForm no pode ser modal.
O formulrio inicial de uma aplicao automaticamente
exibido aps o seu evento Load ser invocado.
Para carregar um formulrio na memria sem exb-lo usamos o
evento Load . Sintaxe:
Private Sub Form_Load( )
Private Sub MDIForm_Load( )
O evento Load usualmente utilizado par incluir o cdigo de
inicializao do formulrio . ( carregar combos , definir variveis
usadas no formulrio ,etc...).
O evento Load ocorre depois do evento Initialize.
Lembre-se:
Quando voc fizer referncia a uma propriedade de um
formulrio no carregado , o mesmo ser automaticamente
carregado , mas no exibido , a no ser que a
propriedade MDIChild estiver definida como True.
Se um objeto MDIForm no estiver carregado e um
formulrio MDI Child for carregado , ambos sero
automaticamente carregados e exibidos.

Ao criar procedures para eventos relacionados , como Activate,


GotFocus , Paint e Resize , esteja ciente que as aes no iro
conflitar e nem causar efeitos recursivos.
Para descarregar um formulrio usamos o evento Unload. Quando o
formulrio for recarregado o contedo de todos os controles sero
reinicilizados. A sua sintaxe :
Private Sub object_Unload(cancel As Integer)
Parte
Object
Cancel

Lembre-se :
Se Cancel for definido como diferente de zero o formulrio no
ser removido , mas outros eventos no sero
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 formulrio ou aplicao encerrar.
Quando um objeto MDIForm encerrado
este evento ocorre primeiro para o
formulrio MDI e ento para todos os
formulrios MDI Child. Se o evento
QueryUnload no for cancelado , o
evento Unload ocorre primeiro para
todos os formulrios e ento para o
formulrio 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 formulrio sem descarreg-lo da memria usamos o evento


HIDE. A sintaxe :
Object.Hide

Quando um formulrio escondido ( Hide ) ele removido da


tela e sua propriedade Visible definida como False. Os
controles de um formulrio escondido no esto acessveis ao
usurio , mas, esto disponveis para a aplicao que esta
sendo executada.
Vejamos um resumo das tarefas envolvendo os eventos discutidos:
Tarefa
Mtodo ou funo
Carregar um formulrio na memria, Use o comando LOAD, ou faa uma
mas no exibi-lo
referencia ou a uma propriedade ou
controle no formulrio
Carregar e exibir um formulrio
Use o mtodo SHOW
Exibir um formulrio carregado
Use o mtodo SHOW
Esconder um formulrio
Use o mtodo HIDE
Esconder um formulrio e
Use o comando UNLOAD
descarrega-lo da memria

Vejamos um exemplo de utilizao dos eventos mencionados, em um


procedimento que inicia um aplicativo:
Sub Main()
Load
frmPrincipal
Carrega
para a memria o
Formulrio principal
Load
frmRegistro
Carrega
para a memria
o Formulrio de registro
Define que o
formulrio ser exibido
maximizado
frmPrincipal.WindowS
tate = vbMaximized
frmPrincipal.Show

Exibe o formulrio
End Sub

Lembre-se :
Ao usar o mtodo Hide para esconder um formulrio ele no
removido da memria. Se voc usar o mtodo Show novamente
todos os controles do formulrio estaro exibindo os mesmos
valores.
Para remover um formulrio da memria use o mtodo Unload.
Para conservar valores dos controles voc pode salv-los em
variveis que podero ser acessadas novamente quando o
formulrio for carregado novamente.
Usar o comando End no uma boa prtica pois encerra sua
aplicao , e , nem sempre libera a memria usada.
Quando voce descarrega um formulrio usando o
mtodo Unload , os eventos QueryUnload e Unload do
formulrio so disparados. Para cancelar a descarga do
formulrio basta definir Cancel = -1 . Para saber como o
formulrio esta sendo descarregado voc pode checar o valor
de UnloadMode: (Veja abaixo)
Constante

Descrio

vbAppTaskManager
(3)

O gerenciador de Tarefas do Windows esta fechando a aplicao.

vbAppWindows (2)

Fechamento da sesso atual do Windows.

vbFormCode (1)

O mtodo Unload foi invocado pelo cdigo

vbFormControlMenu O usurio escolheu o comando Close do menu Box de um formulrio,


(0)
ou clicou o boto X.
vbFormMDIForm (4)

O formulrio MDI child esta fechando pois o formulrio MDI form esta
sendo fechado.

vbFormOwner (5)

O proprietrio do formulrio est fechado.

Carregando, Exibindo e Escondendo um


formulrio

Posicionar o seu formulrio ficou mais fcil a partir da verso 5.0 do


VB. Para centralizar um formulrio na Verso 3.0 e na verso 4.0
usvamos o cdigo abaixo , geralmente no evento Load do form.
Left =
(Screen.Width
- Width ) / 2
Top =
(Screen.Heigh
t - Height ) /
2

A posio inicial pode ser facilmente configurada atravs das


seguintes propriedades:
0 - Manual (voce define a posio inicial atravs das propriedades
Top e Left.)
1 - Center Screen (o formulrio aparece no centro da tela.)
2 - Center Owner (O formulrio aparece no centro da janela do qual
ele exibido.)
3 - Windows Default (O formulrio aparece na posio padro.)
Alm disso podemos configurar tambm se o formulrio ser exibido
Maximizado , minimizado ou na forma normal. Para isto usamos
propriedade WindoState , assim:
0 - Normal
Minimizado
2 - Maximizado

1-

Colees de Formulrios
Uma coleo um agrupamento de itens relacionados. O VB possui a
coleo Forms que composta por todos os formulrios da
aplicao. Atravs da coleo forms podemos rastrear mltiplos
formulrios.
Cada formulrio em nossa aplicao possui uma coleo de controles
embutida , e , voc pode usar a coleo de controles em tempo de
execuo para ter acesso aos controles em um formulrio sem
precisar saber o nome de cada controle ou mesmo o tipo do controle.
Tudo j esta pronto , voc no precisar declarar nada , pois o VB
monta e mantm a coleo enquanto voc desenha o formulrio :
incluindo e/ou excluindo controles do mesmo.

Aonde voc pode usar toda esta teoria ??? Bem , que tal na entrada
de dados usando formulrios !!! Assim voc pode escrever uma rotina
genrica que pesquise a coleo de controles procurando por
controles relacionados com os dados que voc quer usar e alterar
suas propriedades.
Voc pode acessar a coleo de controles atravs da
propriedade Controls de um formulrio. Esta propriedade um vetor
(array) de variveis 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 coleo Forms para interagir com todos os
formulrios criados na aplicao
Existe um tipo especial de formulrio - MDI Form - que contm
outros formulrios chamados MDI Childs. Um Form MDI criado
atravs do Menu Project|Add MDI Form e um MDI Child
criado definindo a propriedade MDIChild do formulrio como
True
Voc pode criar mltiplas instncias de um formulrio via
cdigo atravs da palavra chave New . Veja cdigo abaixo:
Public
formularios As

New Collection
Private Sub
Command1_Clic
k()
Dim NovoForm
As New Form1
Static intnumero
As Integer
intnumero =
intnumero + 1
NovoForm.Captio
n = "Formulrio #
" & intnumero
NovoForm.BackC
olor =
QBColor(intnume
ro)
formularios.Add
NovoForm
NovoForm.Show
End Sub

Neste cdigo primeiro um objeto da coleo formulrios e no evento


Click do boto de comando declaramos a varivel NovoForm do tipo
Form1 usando a palavra New , isto criar uma nova instncia de
form1. Definimos as propriedades Caption e BackColor para cada
instncia afim de diferenciar os formulrios. Abaixo o resultado
quando o usurio clica no boto - Criar Novo Formulrio.

O novo formulrio uma cpia de form1 e essa nova instncia


adicionada a coleo formulrios.
Para acessar os formulrios via coleo Forms podemos usar o
seguinte cdigo:

Dim I as
integer
For I = 0
To
formulario
s.Count
Debug.Pri
nt
Forms(I).C
aption
Next I

Para acessar os controles de um formulrio usamos a coleo


Controls. Assim para esconder todos os controles de um formulrio ,
fazemos:
For Each
Control in
Form1.Contro
ls
Control.Visibl
e = False
Next Control

Assim , para descarregar todos os formulrios de uma aplicao


podemos usar o seguinte cdigo:
For I = 0 To formularios.Count-1
unload Forms(I)
Next I
Ou, podemos usar o cdigo abaixo em uma funo para saber se
determinado formulrio esta carregado ou no:
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 aplicao e o container para os
formulrios que tm a propriedade MDI Child definida como True.
Uma aplicao pode ter somente um objeto MDIForm e muitos
formulrios MDI Child .Se um formulrio MDI tiver um menu o menu
do formulrio MDI Child ir substitu-lo quando estiver ativo. Ao
minimizar um formulrio MDI ele ser exibido como um cone dentro
doMDIForm. 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 formulrio voc deve
inserir um controle picture box e ento inserir neste controle
os demais controles. (...? )
Um formulrio MDIForm no pode ser modal.
Os formulrios MDI Child so independentes do MDIForm , mas
sempre estaro contidos nele.
Podemos acessar uma coleo de controles em um
formulrio MDIForm usando a coleo Controls. Assim para
esconder todos os controles em um formulrio MDIForm ,
fazemos:
For Each
Control in
MDIForm1.Cont
rols
Control.Visible
= False
Next Control

Desabilitando o boto Fechar (Close - X ) via


cdigo
Podemos desabilitar o X do boto Fechar. Vamos fazer este servio
usando uma API, veja abaixo:
Insira este cdigo no formulrio padro
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 boto 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 formulrio a partir de


outro formulrio
Acessar os controles de um formulrio a partir de outro formulrio
uma tarefa muito simples , s voc informar o nome do formulrio
antes do nome do controle que quer acessar. Vamos supor que voc
tenha dois formulrios : form1 e form2 e que no formulrio form1

voc tenha um controle Text1 e no formulrio um outro


controle Text1.
Suponha que voc esteja com o formulrio form1 carregado , para
acessar o controle Text1 do formulrio form1 fazemos:
msgbox text1.text

ou msgbox me.text1.text

Para acessar o controle Text1 do formulrio form2 que no esta


carregado fazemos:
msgbox form2.text1.text
A mesma regra vale quando voc quer alterar as propriedades de
algum controle presente em outro formulrio.
Obs: Se o formulrio form2 no estiver carregado o VB ir carreglo acessar ou alterar as propriedades dos controles mas no vai
exibir o formulrio ; voc ver as mudanas somente quando
carregar o formulrio.
- Minimizando todos os formulrios :
copie o cdigo abaixo em um mdulo no seu projeto e chame a
funo - MinimizarForms()
public sub MinimizarForms()
dim objTemp as object
for each objTemp in forms
objTemp.windowstate = 1
next
end sub

- Descarregar todos os formulrios:


Copie o cdigo abaixo no evento Query_Unload do seu formulrio
dim ret as object
for each ret in forms
unload ret
set ret = nothing
next