Вы находитесь на странице: 1из 113

Visual Basic para

Pequenos Gnios

Parte I Introduo
Introduo
Ns Podemos Nos Divertir Aqui?
Acho que sei o que voc est pensando "Eu quero escrever um programa e quero escrev-lo agora! Codificao a parte
legal; eu no quero ler metade do livro antes de poder escrever meu primeiro programa. Na verdade, essa frase j est
ficando muito longa eu quero comear j!"

Diabinho: Vai em frente. Mergulhe de cabea.


Anjinho: No! No at voc ter lido o livro todo!

Francamente, ainda no encontrei um programador que resistisse a partir diretamente para a ao afinal de contas, se
voc comprasse uma bicicleta nova, conseguiria sentar-se e ler o manual primeiro? Provavelmente no. Voc subiria, daria
uma voltinha, cairia de cara e s mais tarde descobriria que os freios desse modelo so diferentes da conveno comum.
Ento, vamos fazer um acordo. Vamos mergulhar direto no primeiro captulo. Depois que voc tiver instalado o software,
poder executar alguns programas de exemplo e, se estiver confiante, talvez at modific-los.
Mas o cdigo parecer estranho e no far muito sentido voc estar andando s cegas e quando voc cometer um
pequeno erro, no ter idia do que est errado e de como corrigir o problema. Simplesmente no funcionar e voc no
saber por qu. nesse momento que voc sabe que hora de comear a estudar a teoria como um profissional. No se
desestimule quando algo no der certo, nem desista. Quando essa hora chegar, leia o resto do livro, est bem?
A Parte Realmente Importante
Em programao, como em todas as outras profisses, as pessoas que tm mais sucesso so aquelas que amam o que
fazem. Se voc gosta da sua programao, achar difcil se privar de aprender coisas novas. Sua necessidade de saber o
levar adiante e estudar mais ser apenas algo que acontece ao longo do caminho.
Ento, acima de tudo, divirta-se medida que voc domina o mundo da programao Visual Basic!

Software de Que Voc Precisar


Para desenvolver programas em Visual Basic, ser necessrio:
1.

O Microsoft .NET Framework 3.5 (disponvel gratuitamente).

2.

Um ambiente de desenvolvimento do .NET. Recomendamos o Microsoft Visual Basic 2008 Express Edition,
disponvel gratuitamente pela Microsoft em http://download.microsoft.com/download/d/c/3/dc3439e7-5533-4f4c-9ba08577685b6e7e/vbsetup.exe . O pacote de instalao do Visual Basic 2008 Express inclui o .NET Framework, ento voc
no precisa se preocupar em instalar o item 1 acima separadamente.

3.

Por ltimo, voc precisa copiar os arquivos de exemplo do livro para uma unidade no seu prprio computador.
Extraia o arquivo example.zip em qualquer pasta de sua escolha. Apenas lembre-se do local escolhido, pois mais
tarde ser solicitado que voc abra os arquivos nesse local.

Mais Sobre o Microsoft Visual Basic 2008 Express Edition


possvel criar programas em Visual Basic usando nada alm de um simples editor de texto (como o Bloco de Notas) e algo
chamado de "compilador do Visual Basic" includo com o .NET Framework. Para facilitar um pouco as coisas, contudo, e para
garantir que voc possa continuar em frente aps ler este livro, sugerimos que voc use um ambiente de desenvolvimento
como o do Visual Basic Express. Ele um ambiente leve para desenvolver aplicativos do Windows e aplicativos de console
(linha de comando), usando o Visual Basic.
importante que voc entenda que este livro no sobre ensin-lo sobre o produto de software Visual Basic Express
Edition, e sim sobre a linguagem Visual Basic. O Visual Basic Express tambm possui muitos recursos sofisticados, como
escrever cdigos do Visual Basic para voc, quando voc arrasta e solta um boto ou outro controle na pgina. Isso legal e
voc pode us-lo vontade mas este livro tem o objetivo de ensin-lo sobre o Visual Basic desde o incio. Gostaramos
que voc aprendesse a escrever cdigo do Visual Basic a mo primeiro para que voc realmente entenda o que est
acontecendo.
Se desejar saber mais sobre o ambiente de desenvolvimento do Visual Basic Express, v at o site
http://msdn.microsoft.com/en-us/express/future/default .
Escrevendo um Novo Programa Usando o Visual Basic Express

Para iniciar o Visual Basic Express, clique em INICIAR -> Todos os Programas -> Microsoft Visual Basic 2008 Express
Edition
Para iniciar um novo projeto, simplesmente selecione Arquivo -> Novo Projeto e escolha um tipo de projeto.
Comearemos com alguns aplicativos de console e passaremos mais tarde para aplicativos do Windows.

Por exemplo, tente criar um novo aplicativo de console e clicar em OK. Por padro, um arquivo Module1.vb criado.
Renomeie o arquivo para Program.vb. Quando a janela de codificao de Program.vb for exibida, exclua todos os
cdigos automaticamente inseridos e digite um programa simples como este. Voc pode copi -lo e col-lo se estiver
com preguia. Ou seria esperteza?!
Imports System
Class PleaseSayYo
Shared Sub Main()
Console.WriteLine("Yo!")
Console.ReadLine()
End Sub
End Class

Certifique-se de digitar EXATAMENTE como acima (com a exceo de que a formatao pode ser ignorada).

Em seguida, clique no boto Executar ou Reproduzir (ou pressione F5)

Se o programa for executado com xito, ele ser exibido aps um momento, em uma janela acima da janela do Visual
Basic Express.

Quando tiver terminado, pare o programa. Normalmente, isso feito clicando no X, no canto superior direito para
fechar a janela.

Se houver algum problema no cdigo do programa, voc ser alertado sobre esse fato. Por exemplo, voc observa
que na linguagem de computador do Visual Basic, preciso digitar cada instruo em uma nova linha. Se voc tentar
colocar mais de uma instruo em uma linha e clicar no boto de iniciar, ver a mensagem de erro abaixo.

Na maioria dos casos, voc clicar em "No" (No) e ver alguns detalhes na janela "Error List" (Lista de Erros),
incluindo uma indicao do nmero da linha em que o erro foi encontrado. Se voc clicar duas vezes na descrio do
erro, ser levado para a linha onde o problema existe, para que voc tente corrigi-lo.

s vezes, uma instruo muito longa. Mas o Visual Basic precisa que cada instruo esteja em uma linha separada.
Nesse caso, voc pode usar o sublinhado "_" para dividir uma instruo. Por exemplo, se voc possui uma instruo
longa como a exibida abaixo:
MyButtonClickEventHandler(ByVal sender As Object, ByVal anEvtArgs As EventArgs)

E deseja exibi-la em duas linhas separadas. Poder fazer da seguinte maneira:


MyButtonClickEventHandler(ByVal sender As Object, _
ByVal anEvtArgs As EventArgs)

Executando os Programas de Amostra do Livro

Vrios dos programas de exemplo deste livro precisam de arquivos de acompanhamento. Esses programas no sero
executados corretamente se voc simplesmente colar o cdigo como mostrado acima.
Aps ter copiado os arquivos de exemplo para alguma pasta do computador, voc dever execut-los:

No Visual Basic Express, selecione Arquivo -> Abrir Projeto


V at a pasta onde salvou seus arquivos de exemplo e selecione o projeto desejado, que sempre ter uma extenso
.vbproj (projeto do Visual Basic).
Clique no boto verde Executar.

Padres de Formatao Usados Neste Livro


Para que seja mais fcil acompanhar as amostras de cdigo do livro, adotamos certos hbitos:
Considere este bloco de cdigo como exemplo:
' Mtodo principal
Shared Sub Main()
Application.Run(New MyButtonClass())
End Sub
' Mtodo manipulador de evento
Sub MyButtonClickEventHandler(ByVal sender As Object, ByVal e As EventArgs)
mrButton.Text = "You clicked me!"
End Sub

Amostras de cdigos so escritas usando uma fonte ligeiramente diferente no restante do texto (Consolas).
Quaisquer palavras ou smbolos que sejam parte da linguagem do Visual Basic ou que estejam incorp orados ao .NET
Framework, como "Shared Sub", "ByVal", "As", etc, escrevemos na cor azul.
Uma aspa simples ' indica comentrios para explicar o cdigo (na verdade, esse um recurso da linguagem do Visual
Basic). Tudo o que houver no restante da linha ignorado pelo computador. Um exemplo acima "' Mtodo
principal".

A parte II do livro contm a maioria dos conceitos gerais e freqentemente resumimos os principais conceitos aqui. Esses
resumos so chamados de "Blocos de Construo". Veja um exemplo parcial mostrando como um Bloco de Construo
exibido.

Bloco de Construo: Classes


Todos os programas do Visual Basic so criados dentro de classes. A estrutura bsica de uma classe escrita para o
computador como se segue:
Class Animal
End Class

O Que Vem a Seguir?


Voc provavelmente desejar brincar com o Visual Basic Express por um tempo possvel que voc queira explorar seus
arquivos de ajuda e ver sobre o que eles falam. Se o Visual Basic for uma novidade para voc, no entanto, voc
provavelmente descobrir em breve que possuir uma ferramenta de programao no suficiente voc precisa de mais do
que uma simples ferramenta para se comunicar com o computador.

Ento, hora de enfrentar a prxima parte do livro: aprender a se comunicar com o computador usando a linguagem de
programao do Visual Basic.

Parte II Aprendendo a se Comunicar


O principal problema enfrentado quando escrevemos programas de computao o fato de que o computador no foi
"educado" da mesma forma que ns. Se isso tivesse acontecido, teramos uma compreenso semelhante do mundo, e
tambm falaramos a mesma lngua.
Isso tornaria muito simples a comunicao e o entendimento mtuo. Poderamos simplesmente escrever "computador, por
favor, desenhe a figura de um gato" e isso funcionaria.
Diante disso, voc dir: "Ento, ensine os computadores a nos entenderem." S que os computadores, construdos de forma
muito diferente do crebro humano, tm uma viso das coisas radicalmente diferente e no fcil ensinar-lhes a pensar
como ns pensamos.

Computador: Eu no tenho a menor idia do que voc acabou de dizer.

A soluo encontrar um meio-termo:

uma "viso de mundo" comum e


uma "linguagem" comum

que tanto os seres humanos quanto os computadores compreendam.


Esta parte do livro destina-se a ensinar como comunicar-se com o computador. Voc precisa adaptar um pouco sua forma
de pensar para ver as coisas do ponto de vista do computador. um verdadeiro exerccio de intercmbio, pois o
computador aprender uma srie de coisas do seu "mundo" (como algumas palavras em ingls), mas voc tambm precisar
aprender algumas coisas do "mundo" dele. Tente entender o que se passa na "mente" do computador e imagine como voc
gostaria que um ser humano explicasse o que deseja.

Uma Viso Compartilhada do Mundo: O Aliengena, o Elefante e o Coqueiro


Os computadores no tm como saber o que se passa em nossas mentes, o que esperamos que eles faam ou como devem
faz-lo. Podemos sonhar com o dia em que olharemos na direo deles, levantaremos a sobrancelha e eles compreendero;
mas, de volta ao mundo real, ainda precisamos descrever com muita clareza o que queremos dizer, e at mesmo como o
computador deve agir para nos ajudar. Em resumo, h uma grande lacuna de comunicao entre seres humanos e
mquinas. Se queremos que elas nos ajudem, precisamos preencher essa lacuna.

Agora, esquea um pouco os computadores e, em vez disso, imagine que voc precisa desesperadamente conversar com
uma criatura aliengena. Veja como se passa essa histria...

Por uma tremenda falta de sorte, aconteceu algo de muito errado com o universo e, por um motivo misterioso, voc
e um estranho aliengena acabaram presos em uma pequena ilha deserta no meio do oceano. Depois de desistir de
se apresentar dizendo "Oi, meu nome Sally, qual o seu?", voc decide simplesmente cham-lo de "Algy".

Voc sente fome e observa alguns cocos no alto de um coqueiro. Ento, percebe que precisar da ajuda de Algy para
peg-los e isso no vai funcionar, a no ser que os dois aprendam a se entender.
Voc comea desenhando um coqueiro na areia e, apontando para ele, fala claramente a palavra "co-co". Voc se
impressiona quando Algy prontamente responde "co-co"! Voc desenha mais figuras e, a cada vez, Algy responde
perfeitamente. Voc descobriu que a criatura tem uma aptido natural para linguagens. Antes do anoitecer, Algy j
aprendeu seu idioma.

Exultante com esse progresso, voc olha nos olhos de Algy. "Algy, por favor, levante-me nos seus ombros para que
eu pegue os cocos e possa com-los".
Ele dirige a voc um olhar vazio. Ele dirige figura do coqueiro um olhar vazio. Olha de novo para voc. Olha de
novo para a figura. No tem jeito, ele no entendeu. Batendo na prpria cabea, voc percebe a tolice do seu erro e
aponta impetuosamente para a rvore real. Mas, ainda assim, Algy no entende. Na verdade, voc descobre que ele
s bom com figuras. Aaaargh! Lentamente, voc comea a perceber que, embora ele seja capaz de usar seu idioma,
no tem NENHUMA compreenso dos objetos reais sobre os quais voc est falando.

De alguma forma, voc precisa fazer a traduo entre a "viso de mundo" dele e a sua. Sem problemas, voc pensa,
"eu ensinei a ele um idioma e posso ensinar sobre os objetos do mundo real". Trs dias depois, os cocos continuam
no mesmo lugar. As lies no vo bem e voc comea a perder o controle, assim como a conscincia.
Voc no tem certeza se est sonhando, tendo alucinaes ou uma viso, mas surge uma apario vestida de branco,
em meio a uma luz brilhante e enevoada. "Eis uma tima forma de ver o mundo ao seu redor", exclama uma voz.
"Uma viso que tanto voc quanto Zniff12 podem entender." (Voc imagina que esse seja o nome verdadeiro de
Algy.) Voc perde totalmente a noo do tempo enquanto imagens penetram magicamente em sua mente,

ensinando-lhe essa forma de descrever o mundo. Por fim, com a expresso tranqila, voc emerge desse estado
atemporal.

Saindo da viso, voc agarra Algy pelos ombros e diz: "J entendi, amigo, oua com ateno o que vou dizer." Algy
franze a testa enquanto voc fala.

"O mundo que nos cerca tem diversas classes de coisas plantas, animais, seres humanos famintos, aliengenas
etc."

"Agora, meu nico interesse conversar com voc sobre os objetos reais nesta ilha. Especialmente, caso voc
ainda no tenha percebido, tenho grande interesse no coqueiro (que, por sinal, est na classe chamada
"plantas"). Tambm tenho interesse naquele elefante ali. estranho, mas s reparei nele agora." (Voc aponta
para cada um desses elementos enquanto fala.)

"O elefante est na classe chamada "animais" e tem algumas propriedades importantes para ns, Algy. Primeiro,
todos os animais podem se mover. Segundo, o elefante um animal realmente pesado imagino que tenha
umas duas toneladas e isso ser til. Terceiro, ele est mal-humorado, e isso tambm ser til.

"Certo, Algy, continue prestando ateno... No mundo que nos cerca, ocorrem eventos o tempo todo. Eu sinto
fome isso um evento. Os cocos amadurecem isso um evento. s vezes, ns mesmos podemos disparar
um evento, a fim de ocasionar alguma ao. Tenho uma tima idia: vamos disparar um evento de "perturbao
do elefante" para que ele nos ajude na ao de "derrubar os cocos"."

"Vamos dividir o trabalho. Eu me encarrego de disparar o evento (vou perturbar o elefante para que ele olhe
para voc) e voc faz com que ele derrube os cocos, certo?" Diante disso, Algy olha para voc envergonhado e
admite: "Sally, eu ouo o que voc est pedindo, mas no sei como fazer isso." Voc responde, dando um
tapinha nas costas dele: "Algy, no se preocupe. Nunca pedirei a voc que faa alguma coisa sem primeiro
explicar o mtodo para fazer." Eis aqui as etapas a serem realizadas quando eu incomodar o elefante e disser a
voc para "derrubar os cocos":

Saia de trs desta rocha e fique de p junto rvore. O elefante atacar voc imediatamente.
Precisamente quando ele alcanar a linha que desenhei na areia, corra para salvar sua vida (v para o lado,
pois para a frente ou para trs no seria uma boa idia).
Ele acertar a rvore e ficar atordoado por alguns instantes, mas a fora derrubar os cocos e poderemos
recolh-los mais tarde.
Por fim, volte ao ponto onde comeamos e informe como nos samos.

Algy faz uma longa pausa, aparentemente assimilando sua lio. Depois, inesperadamente surge com um aparelho
avanado de comunicao. Ele fala no aparelho por alguns instantes, em uma voz que soa como um modem, depois
o guarda novamente na bolsa. "O que foi tudo isso, Algy?", voc pergunta. Algy responde: "Deixe -me traduzir, Sally...

o
o
o

Existe uma classe de objetos chamada X-Zniffers.


Eu sou um objeto dessa classe, mas existem outros.
Todos os objetos nessa classe tm as propriedades:
nome (o meu, por exemplo, Zniff12)
formatoOrelha (que sempre parece ter o valor "tubo")
gostaDeAssistirTv (que verdadeira na maioria dos casos, mas falsa em outros)

A verdade que o meu pouso aqui no foi acidental. Voc est em um programa de TV muito popular chamado
"Sobrevivente". Mas acabo de ligar para o meu produtor e de dizer a ele que no ganho o suficiente para isto. Ele vai
executar o mtodo EnviarEmbarcaoResgate imediatamente."
Certo, agora voc j percebeu que eu contei uma histria um tanto inverossmil. Mas o importante que voc e Algy
desenvolveram uma forma comum de descrever o mundo os dois usam os mesmos termos e tm a mesma compreenso
do que significam. Isso, alm do fato de compartilharem a mesma linguagem, permite que se comuniquem.

Os Computadores So Como Aliengenas


Imagine agora que, em vez de tentar explicar coisas ao aliengena, voc precise explic-las a um computador. Voc ter uma
experincia parecida com a descrita anteriormente. E conseguir resolver o problema de for ma semelhante chegando a
um acordo quanto a uma forma comum de ver o mundo, que tanto seres humanos quanto mquinas entendam.
Em primeiro lugar, deve ficar claro que a abordagem usando "classes, objetos, propriedades, eventos e mtodos" descrita na
histria no uma verdade perfeita e inaltervel. apenas uma forma que escolhemos para explicar o mundo que nos cerca
a uma criatura alheia a ele. O mais importante que vocs dois concordem em descrever o mundo da mesma maneira. Mas
essa maneira de ver o mundo, que, por sinal, chamada de abordagem "orientada a objeto", tornou-se muito popular como
uma forma de descrever as coisas para os computadores. E, na verdade, o Visual Basic insiste que voc use a abordagem
orientada a objeto.
Ento, aprender Visual Basic envolve o aprendizado de como descrever coisas usando classes, objetos, eventos, mtodos etc.
Para que o computador o ajude a fazer coisas teis:

Voc (o ser humano) aprende a linguagem Visual Basic e como descrever as coisas de forma orientada a o bjeto.

Voc instala o software do Visual Basic e alguns outros produtos de software relacionados agora o computador
tambm entende a linguagem Visual Basic e como trabalhar com os elementos descritos de forma orientada a objeto.

E a est. Voc e o computador compartilham uma viso de mundo, assim como uma linguagem, e em breve se comunicaro
como velhos amigos.

Um Resumo da Abordagem Orientada a Objeto


Vamos explicar claramente o que queremos dizer com orientao a objeto, na viso de um programador.

O mundo que nos cerca pode ser dividido em diversas classes de coisas, como "gatos", "casas" ou "rvores". Essas
classes podem ser entendidas como categorias ou rtulos para agrupar elementos semelhantes. Precisamos de uma
maneira de descrever essas classes para o computador, de forma que ele possa solucionar problemas relacionados a
elas.
Em cada classe de coisas h alguns objetos especficos nos quais estamos interessados. Por exemplo, na classe
"gato", h o meu gato, Fluffy, que um objeto dessa classe. Da mesma forma, a casa rosa na esquina da minha rua
um objeto da classe "casa", e o carvalho em frente janela do meu quarto um objeto da classe "rvore". Quando
queremos que o computador trabalhe com um objeto especfico, precisamos escrever uma descrio para o
computador que represente aquele objeto.
Os objetos tm uma grande variedade de propriedades. As propriedades so os elementos que descrevem os objetos
com mais clareza. Lembre-se das suas aulas de portugus: as propriedades so como os adjetivos na lngua
portuguesa. Por exemplo, o meu gato Fluffy pode ser descrito com propriedades como tamanho, peso, cor etc.
Os eventos so as coisas que acontecem com um objeto. No mundo real, ocorrem eventos ao nosso redor o tempo
todo. Por exemplo, quando brinco com meu gato Fluffy, isso um evento que ocorre com Fluffy. Da mesma forma, o
vento batendo nos galhos do carvalho em frente minha janela um evento que ocorre com a rvore. Geralmente,
os eventos so aes que afetam o objeto especfico, mas sobre os quais o objeto no tem controle. No mundo do
computador, os eventos so geralmente coisas como "um boto foi clicado" ou "o mouse foi movido".
As aes so as coisas que um objeto faz. Por exemplo, meu gato Fluffy lambe o prprio plo isso uma ao. No
mundo do computador, algumas vezes, quando ocorrem certos eventos interessantes, queremos disparar certas
aes, como "quando este boto for clicado, desenhe a figura de um gato".
Acredite se quiser, mas os computadores so realmente tolos. Um computador no tem idia de como desenhar um
gato. Ento, precisamos escrever, de forma que o computador entenda, o mtodo para desenhar um gato. um
conjunto de instrues passo a passo que dizem ao computador como fazer isso, como em uma receita.

Nos prximos captulos, explicaremos em mais detalhes cada um desses aspectos da programao orientada a objeto.
Tambm vamos mostrar como escrev-los na linguagem Visual Basic, para que o computador entenda o que estamos
descrevendo.

Classes
Podemos optar por dividir o mundo que nos cerca em vrios grupos de coisas vamos cham-los de classes.
Em um exemplo bvio, pense nas classes existentes na escola. As crianas de determinada idade podem ser agrupadas e
colocadas em uma classe, ou talvez as crianas com uma habilidade especfica possam ser agrupadas em uma classe. Isso
permite que todas sejam tratadas de forma semelhante. Elas aprendero o mesmo conjunto de coisas e sero testadas da
mesma forma.
Isso no significa que todos em uma classe so iguais apenas que tm algumas caractersticas em comum.

Em outro exemplo, poderamos agrupar todos os seres vivos em duas classes, chamadas "plantas" e "animais".

Agora, vamos voltar a nos expressar de forma que o computador entenda o que estamos tentando dizer
No Visual Basic, descrevemos assim uma classe para o computador:
Class Animal
End Class

Apenas com esse pequeno trecho de cdigo, ele j sabe:

que queremos falar sobre uma classe de coisas;


que chamaremos essa classe de Animal;
que tudo o que dissermos sobre essa classe ser escrito entre as instrues Class Animal End Class.

Embora chamar sua classe de "Animal" certamente faa sentido em um programa que exibe figuras de animais ou armazena
fatos sobre animais, tambm comum ter nomes de classes como "MyPhotoProgram" ou "MyGradeCalculator". Ento,
procure perceber que as classes no trabalham necessariamente com elementos existentes no mundo real voc vai
nomear sua classe de forma a descrever aquilo com que ela trabalha.

Bloco de Construo: Classes

Todos os programas do Visual Basic so criados dentro de classes. A estrutura bsica de uma classe escrita para o
computador da seguinte forma:
Class Animal
End Class

A palavra "Class" conhecida pelo computador e deve ser escrita com "C" maisculo e as demais letras minsculas, mas o
nome dado sua classe pode ser uma palavra escolhida por voc e pode ser escrito usando uma combinao de letras
maisculas e minsculas. No pode conter elementos como espaos.
Cada instruo do Visual Basic deve ser escrita em uma linha separada.

Voc saber mais sobre o que acontece dentro da descrio da classe um pouco adiante. Primeiro, na prxima lio, vamos
abordar os objetos.

Objetos
Em cada classe, h alguns objetos reais. Na classe de coisas chamada "Animal", por exemplo, h algumas criaturas
especficas:

o gato da sua tia, "Fiddlesticks";


uma vaca que voc viu no campo uma vez, mas no sabe qual o seu nome;
um gorila chamado Jeremy;
etc.

Na lio anterior, voc aprendeu como comear a dizer ao computador coisas sobre a classe Animal em geral. Mas, em
algum momento, voc provavelmente vai querer dizer a ele algo sobre um ou mais objetos especficos. Por exemplo, "h
uma criatura especfica na classe de animais que chamo de FiddleSticks".
Podemos expressar isso para o computador da seguinte forma:
Dim fiddleSticks As Animal

Isso to curto que voc precisa parar e pensar um pouco, para no perder a linha de raciocnio. O computador entende
que isso significa: "Este ser humano quer falar sobre algo na classe Animal e quer cham-lo de "fiddleSticks". No tenho
idia do que fiddleSticks significa, mas, se assim que o ser humano quer cham-lo, para mim est bem."
No entanto, precisamos de mais uma instruo depois daquela:
fiddleSticks = New Animal()

Pode parecer estranho que seja preciso fazer essas duas coisas. Mas, do ponto de vista do computador, faz sentido.
Coloque-se "no lugar da mquina" e pense nisso da seguinte forma:

A primeira instruo avisa ao computador que, em breve, vamos pedir a ele que trabalhe com um indivduo
especfico na classe "Animal". O computador agora tem a chance de verificar se tem conhecimento da classe
"Animal". Ele percorre todo o seu programa e verifica se voc descreveu em algum lugar uma classe chamada
"Animal". Caso no a encontre, ele pode avis-lo, dizendo "ei, no poderei fazer isso". Se ele encontrar o que for
necessrio, vai apenas prosseguir calmamente, lembrando-se do fato de que voc pedir a ele para fazer algo mais
tarde com o Animal chamado fiddlesticks.
Ento, em um momento posterior, acrescentamos a segunda instruo, que diz ao computador: "Ei, lembra -se do
objeto fiddleSticks? Preciso que voc trabalhe com ele agora. Crie algum espao na sua mente para pensar nesse
Animal." O computador imagina um novo objeto da classe "Animal" em sua mente e v que voc est falando sobre
o mesmo (fiddlesticks) mencionado anteriormente. Como j leu a classe "Animal", ele j sabe de algumas
caractersticas que devem ser verdadeiras sobre fiddleSticks e tem essas informaes prontas em sua mente,
esperando que voc conte mais coisas ou faa perguntas sobre fiddlesticks.

Vamos, agora, juntar as trs coisas e imaginar como o computador "pensa" nelas:

Computador: Humm, voc disse que existem coisas no mundo que so similares o suficiente para serem agrupadas juntas dentro de uma classe
chamada Animal

Computador: Voc disse que ns vamos trabalhar com um objeto do tipo Animal? Uuh... Espere um pouco... Yup, eu conheo sobr e Animais. Me avise
quando estiver pronto.

Computador: Ok, eu lembro que voc disse que ns iramos falar sobre isto. Legal, eu estou imaginando um novo Animal na minha cabea. Ns vamos
continuar chamando-o de Fiddlesticks pois assim voc e eu saberemos de que estamos falando do mesmo.

Observe que, no primeiro bloco, descrevemos a classe de coisas em geral; j nos blocos 2 e 3, apontamos um objeto
especfico na classe Animal.

Bloco de Construo: Objetos


Os objetos so elementos individuais especficos de uma classe.
A classe apenas descreve "como so todos esses elementos" de forma geral. o plano bsico para criar um objeto.
Class Animal
End Class

Se planejamos trabalhar com um objeto especfico, precisamos dizer ao computador (com antecedncia) a que classe ele
pertence, para que o computador possa primeiro verificar se tem conhecimento dessa classe. Fazemos isso especificando a
classe qual o objeto pertence e atribuindo ao objeto um nome nossa escolha.

Nome do
objeto
Dim

percyThePorcupine

Nome da
classe
As

Animal

Isso se chama "declarar o objeto".


Quando estivermos prontos para trabalhar efetivamente com o objeto, devemos pedir ao computador para "criar uma
instncia" da classe. Ele, agora, utiliza seu conhecimento da classe para criar um objeto "real" com o qual pode trabalhar.
percyThePorcupine = New Animal()

Isso se chama "instanciar o objeto".


Neste exemplo, "percyThePorcupine" agora uma instncia de "Animal". Outra forma de dizer isso que
percyThePorcupine um "objeto" do tipo "Animal". De qualquer forma, agora sabemos claramente que estamos falando de
um Animal especfico.

Agora, j sabemos como falar de um objeto especfico em uma classe. Mas, como a classe que definimos bastante simples
(tudo bem, eu admito, est totalmente vazia), no h muitos elementos interessantes para se trabalhar. Ento, na prxima
lio, vamos acrescentar algumas coisas nossa classe.

Os Campos e Seus Tipos


Se eu pedisse a voc para fazer uma lista com algumas propriedades dos animais, provavelmente voc apresentaria coisas
assim:

Tipo de animal
Altura
Comprimento
Nmero de patas
Cor
Tem cauda
um mamfero

E, quando voc falar sobre um animal especfico, poder estud-lo e atribuir valores a cada uma de suas propriedades:

Tipo de animal = "Gato"


Altura = 50 cm ( um gato grande!)
Comprimento = 80 cm
Nmero de patas = 4
Cor = "Preto"
Tem cauda = true
um mamfero = true

Tipo de animal = Gato


Tem calda = verdadeiro
Cor = preto
No. de pernas = 4
Altura = 50
Comprimento = 110

No Visual Basic, essas propriedades so geralmente chamadas de campos (o termo "propriedades" usado para uma
finalidade ligeiramente diferente, que no precisamos detalhar aqui).

Tipos
Agora, vamos abordar algo com que no nos preocupamos muito no mundo real, mas que tem grande importncia para os
computadores: embora todas as propriedades acima paream o mesmo tipo de coisa, na verdade existem diferentes tipos
de campos. Vejamos alguns exemplos:

Os valores acima para altura, largura e nmero de patas so nmeros geralmente elementos com os quais
esperamos que o computador faa alguma operao matemtica. Esse o caso em muitas situaes.

Macaco: 10 bananas / 2 pessoas = 5 para cada

Nessa situao, voc poderia optar por usar trs campos com nomes como: "numberOfBananas", "numberOfPeople" e
"numberEachOneGets". Como voc precisa calcular alguma coisa com uma diviso matemtica, deve torn -los tipos numricos.

Macaco: Crocodilo! Eu disse C-R-O-C-O-D-I-L-O

Contudo, importante observar que algumas cadeias de caracteres podem conter dgitos numricos tambm. Voc poderia,
por exemplo, armazenar o seguinte em uma campo de cadeia de caracteres: "Este o 17o crocodilo que vejo hoje!", que
contm letras do alfabeto, espaos, dgitos numricos e sinais de pontuao. Mas voc no pode realizar nenhuma operao
matemtica com os nmeros contidos em uma cadeia de caracteres!

Um campo como Tem Cauda sempre ter como valor True ou False, assim como qualquer campo do tipo "sim ou
no".

Macaco filho: Papai, verdade que os macacos evoluram dos humanos?


Macaco pai: Sim, meu filho. verdade.

Os computadores trabalham com cada um desses diversos "tipos" de formas especiais, ento, quando definimos campos,
espera-se que digamos qual o tipo de campo a ser usado. Em um programa, podemos dizer que nmero de patas deve ser
tratado como uma cadeia de letras, porque no temos interesse em realizar nenhuma operao matemtica com essa
propriedade; j em outra ocasio, podemos tratar esse campo como numrico, porque precisamos que o computador
calcule quantas patas haver se houver 500 objetos do tipo animal.
O Tipo String (Cadeia de Caracteres)
A forma de dizer ao computador que voc quer que ele trate uma certa propriedade como uma cadeia de letras simples:
Dim kindOfAnimal As String

Nota do tradutor: por questes de compatibilidade com o documento original, alguns nomes de propriedades, classes, etc,
continuaram em ingls (por exemplo, kindOfAnimal = tipoDoAnimal). Isto no impede de voc mais tarde alter-los para
portugus.
Ainda no colocamos nenhum valor nesse campo. Estamos apenas dizendo ao computador com que tipo de dados vamos
trabalhar e atribuindo um nome ao campo. Ponha-se no lugar do computador e imagine como voc responderia se um ser
humano escrevesse isso para voc.

Computador: Ah, uma propriedade string.


Eu deixarei voc armazenar coisas como gato ou a rvore de seringueira nesta propriedade

Tipos Numricos
Para dizer ao computador que deve tratar um campo como um nmero, voc pode especificar um dos vrios tipos
numricos conhecidos pelo Visual Basic. Um dos tipos numricos mais comuns Integer. Lembre-se das suas aulas de
matemtica: Integer , na verdade, um nmero inteiro, e pode ser negativo, positivo ou zero.

Uma forma simples de expressar para o computador o fato de que voc quer que um campo seja do tipo Integer a
seguinte:
Dim numberOfLegs As Integer

E o nosso amigo digital pensar o seguinte...

Computador: Eu deixarei voc colocar valores como 4, -24000 e 0 nesta propriedade. E devido a voc ter escolhido um tipo numrico, voc poder
dividir coisas, multiplicar e muito mais

O Tipo Booleano
Se voc sabe que alguma coisa ser sempre "true" (verdadeiro) ou "false" (falso) e nunca ter outro valor, til usar o tipo
True/False do Visual Basic. Esse tipo tem um nome estranho, "booleano", em homenagem a um matemtico chamado
George Bool, mas na verdade o mais simples de todos.
Voc pode dizer ao computador para que ele trabalhe com um campo chamado "hasTail" como um tipo "True/False" da
seguinte forma:
Dim hasTail As Boolean

E a mquina pensar...

Computador: As nicas coisas que eu posso deixar voc colocar em uma propriedade booleana so os valores True (verdadeiro) e False (falso)

Como Usar Campos


Ento, os campos so as informaes que nos permitem descrever melhor os elementos em uma classe. E os campos so
sempre de um tipo especfico.
Adicionando Campos Classe
Tudo o que dissemos anteriormente ao computador sobre "animais" em geral que os chamamos de "Animal". Promete mos
que depois acrescentaramos mais informaes sobre os "animais" entre Class Animal End Class.
Class Animal
...
End Class

Bem, agora estamos prontos para fazer isso. Vamos acrescentar alguns campos nossa definio da classe:
Class Animal
Dim kindOfAnimal As String
Dim name As String
Dim numberOfLegs As Integer
Dim height As Integer
Dim length As Integer
Dim color As String
Dim hasTail As Boolean
Dim isMammal As Boolean
Dim spellingCorrect As Boolean

End Class

Para manter seu cdigo claro e legvel, comum o uso de recuos nos campos, conforme mostrado acima. Para fazer isso,
pressione a tecla TAB no teclado. Voc tambm pode selecionar algumas linhas e aplicar um recuo a todas elas
pressionando uma vez a tecla TAB.
Usando Campos com Objetos Especficos
Certo, ento j explicamos ao computador que TODOS os animais tm esses campos. Agora, vamos pedir-lhe que crie uma
instncia representando um animal especfico (como fizemos no captulo anterior) e depois dizer ao computador algumas
coisas sobre esse animal especfico, atribuindo valores a cada campo.
Dim fiddlesticks As Animal
fiddlesticks = New Animal()
fiddlesticks.kindOfAnimal = "Cat"
fiddlesticks.name = "Fiddlesticks The Cat"
fiddlesticks.numberOfLegs = 4
fiddlesticks.height = 50
fiddlesticks.length = 80
fiddlesticks.color = "Black"
fiddlesticks.hasTail = True
fiddlesticks.isMammal = True

Observe que, nos campos de cadeia de caracteres, sempre colocamos o valor entre aspas (""), mas no nos outros tipos.
Neste ponto, convm lembrar a voc que o nome do objeto que escolhemos, "fiddlesticks", no tem valor sentimental para
o computador. Ele trabalhar com esse objeto exatamente da mesma forma se substituirmos todos os nomes "fiddlesticks"
pelo nome "X", ou por qualquer outro nome sua escolha:
Dim X As Animal
X = New Animal()
X.kindOfAnimal = "Cat"
X.height = 50
X.length = 80
X.color = "Black"
X.hasTail = True
X.isMammal = True

Bloco de Construo: Campos


Uma classe normalmente tem um ou mais campos, que nos permitem descrever os detalhes dos elementos contidos na
classe.
Class SchoolKid
Dim firstName As String
Dim lastname As String
Dim age As Integer
Dim isWideAwake As Boolean
End Class

Embora os campos possam ser escritos junto margem, uma prtica recomendada recu-los um espao de tabulao
para a direita, pressionando a tecla TAB do teclado. Isso torna o cdigo mais fcil de ler.
Esses campos so sempre de um tipo especfico. H muitos tipos de campos diferentes, mas eis alguns muito comuns:
Tipo
String

O que significa
Contm, principalmente, elementos como palavras
e frases, que so formados pelo "encadeamento"
de letras do alfabeto e alguns outros smbolos.

Exemplos de valores
"Sam"
"Polvo com oito tentculos"
"As meninas so espertas demais para
cair do carrinho"

Inteiro

uma espcie de nmero inteiro.

Boolean

Significa "verdadeiro ou falso".

328
28000
-520
True
False

Quando voc define um campo em um programa, precisa inserir um tipo e um nome para o campo:
Dim lastname As String

O tipo deve ser digitado exatamente como o computador o conhece.


O nome do campo uma palavra sua escolha, como "isWideAwake", e pode ser escrito com letras maisculas e
minsculas. No so permitidos elementos como espaos.
Quando voc trabalha com um objeto especfico, normalmente atribui valores aos campos, o que ajuda a descrever o
objeto. Se temos, por exemplo, um objeto de nome schoolKid, podemos atribuir a seus campos os seguintes valores:
SchoolKid.firstName = "Jiminy"
SchoolKid.age = 13

Separamos o nome do objeto e o nome do campo com um ponto ".".


Ento, SchoolKid.firstName = "Jiminy" significa "coloque o valor "Jiminy" no campo firstName do objeto schoolKid".

Campos Particulares, Protegidos e Pblicos


Este tpico no ser to importante enquanto voc estiver aprendendo as noes bsicas do Visual Basic, mas voc poder
se deparar mais tarde com as palavras "particular", "protegido" e "pblico" e se perguntar o que significam. Ento, vamos
falar sobre elas.
Class Animal
Dim kindOfAnimal As String
Dim name As String
Dim numberOfLegs As Integer
Dim height As Integer
Dim length As Integer
Dim color As String
Dim hasTail As Boolean
Dim isMammal As Boolean
Dim spellingCorrect As Boolean
End Class
Class MyTestClass
End Class

possvel fazer com que elementos de uma classe, como MyTestClass acima, tratem de elementos de outra classe, como
Animal.
Quando os campos so declarados da forma mostrada acima, podemos decidir se queremos ou no permitir que outras
classes tenham acesso a eles. Algumas vezes, realmente importante tornar os campos "particulares" porque, por exemplo,
outra classe poderia colocar neles valores indesejveis e interromper o programa. Definir um campo em algum ponto no
intervalo entre particular e pblico tem relao com o nvel de segurana necessrio nossa classe.

Dentro da casa = Privado


Dentro do quintal = Protegido
Calada = Pblico

Observe os diferentes nveis de proteo das crianas na famlia retratada acima. Sally, o beb, mantida em um ambiente
particular, Private ela no tem permisso para sair da casa e conta com o mais alto nvel de segurana. Somente as
pessoas mais confiveis podem interagir com ela. Billy tem a liberdade de ir ao quintal, mas ainda est protegido, Protected.
Tom, o mais velho, pode ir ao espao pblico, Public, e qualquer pessoa do lado de fora pode interagir com ele da forma
que escolher.
Podemos, ento, acrescentar uma palavra ao incio das declaraes de campos, da seguinte forma:
Class Animal
Public kindOfAnimal As String
Public name As String
Public numberOfLegs As Integer
Public height As Integer
Public length As Integer
Public color As String
Dim hasTail As Boolean
Protected isMammal As Boolean
Private spellingCorrect As Boolean
End Class

Voc deve estar imaginando o que acontece se deixarmos de fora essas palavras. A resposta que o computador trata
silenciosamente esses campos como se voc tivesse escrito "Private" na frente deles, pois essa a configurao padro.
Ento, o campo hasTail acima se tornar automaticamente Private.
O que essas palavras significam?

Private significa que "somente elementos desta classe podem acessar este campo".
Public significa que "qualquer classe pode acessar este campo".
Protected significa que "somente classes diretamente relacionadas podem acessar este campo".

As duas classes a seguir ilustram como Public e Private funcionam na prtica. No vamos discutir mais o termo Protected,
mas voc poder ler sobre isso na ajuda do Visual Basic Express, se tiver curiosidade.

Primeiro definimos, como fizemos antes, alguns campos particulares e pblicos na classe "Animal", e ento tentamos acessla a partir da classe "Zoo".
Class Animal
Public kindOfAnimal As String
Public name As String
Public numberOfLegs As Integer
Public height As Integer
Public length As Integer
Public color As String
Dim hasTail As Boolean
Protected isMammal As Boolean
Private spellingCorrect As Boolean
End Class
Class Zoo
Dim a As Animal = New Animal()
' A linha seguinte ser bem sucedida porque a classe "Zoo" est autorizada
' a usar campos pblicos na classe "Animal"
a.kindOfAnimal = "Kangaroo"
' As linhas seguintes iro FALHAR porque a classe "Zoo" no est autorizada
' a usar campos privados ou protegidos
a.isMammal = False
' Tenta acessar um mtodo protegido
a.spellingCorrect = True
' Tenta acessar um mtodo privado
End Class

Mtodos
Os programas seriam praticamente inteis se nos permitissem somente descrever objetos. Logicamente, tambm queremos
que eles "faam coisas":

escrever na tela;
calcular a resposta para um problema;
copiar dados de um site;
clarear uma fotografia;
e milhares de outras coisas.

Agora, lembre-se de quando sua professora lhe ensinou a somar nmeros. O mais provvel que tenha ensinado primeiro
COMO somar os nmeros provavelmente mostrando algumas etapas que voc deveria seguir. Em outras palavras,
primeiro voc aprendeu o MTODO para resolver esse tipo de problema. Um mtodo um conjunto de instrues passo a
passo explicando como fazer alguma coisa.

Professora: Mtodo para adicionar 2 nmeros:


1.Escreva o primeiro

Quando voc tiver um mtodo para resolver os problemas de um tipo especfico, ser capaz de resolver qualquer problema
daquele tipo seguindo as etapas do mtodo.

Professora: Agora use o mtodo para adicionar os seguintes nmeros...

Da mesma forma, se quisermos que o computador faa coisas, precisamos primeiro escrever o cdigo para dizer a ele como
fazer ou seja, precisamos descrever o mtodo que ele deve usar para realizar essas coisas. Ele poder, ento, usar esse
mtodo sempre que apresentarmos um problema do mesmo tipo.
No Visual Basic, um mtodo um trecho de cdigo que descreve para o computador a forma de realizao de uma tarefa.
Mais tarde, quando chamarmos esse mtodo, o computador percorrer o cdigo, fazendo exatamente o que escrevemos.
Podemos descrever para o computador um mtodo simples da seguinte forma:
Sub SayHello()
End Sub

Mas um mtodo fica sem sentido se no faz nada. Ento, vamos acrescentar mais cdigo ao mtodo, para que ele possa
fazer alguma coisa.
Sub SayHello()
Console.WriteLine("Hello")
End Sub

Para maior clareza, voc deve recuar o cdigo de um mtodo um espao de tabulao para a direita, pressionando a tecla
TAB.
Se chamssemos esse mtodo agora, ele escreveria na tela a palavra "Hello". No um problema muito dif cil, ento o
mtodo bem simples.
O Que Significa Sub?

Talvez voc esteja confuso com uma palavra estranha, "Sub", que aparece no exemplo acima, e esteja imaginando por que
ela foi escrita. Ento, vamos examinar rapidamente essa palavra. Quando usamos Sub, isso significa que, quando a execuo
do mtodo termina, ele retorna um valor "nada" ou seja, nada mesmo! Isso no significa que o mtodo no faz nada, mas
sim que, depois de concluir o que precisa fazer, ele no retorna "nada". Isso se ajusta bem ao nosso mtodo SayHello acima
porque, depois de escrever a palavra "hello", ele no precisa retornar nada. J fez tudo o que precisvamos que ele fizesse.
Isso far mais sentido quando abordarmos alguns casos nos quais vamos querer que um mtodo retorne alguma coisa, um
pouco mais adiante em nossa jornada.
Chamando um Mtodo
Ao escrever o cdigo acima, ensinamos ao computador COMO escrever "hello" na tela, mas ainda no lhe dissemos para
fazer isso.
como sua professora, quando mostrou como somar nmeros e fez com que voc anotasse o mtodo, mas no pediu que
voc fizesse uma soma especfica.
Para que o computador execute a ao, precisamos chamar o mtodo. Algumas vezes, isso feito simplesmente escrevendo
o nome do mtodo seguido por parnteses, desta forma:
SayHello()

Quando o computador se depara com essa linha, ele no sabe como lidar com o comando, ento procura rapidamente um
mtodo escrito por voc, chamado "SayHello". Ele o encontra e logo percorre cada linha do mtodo, fazendo exatamente o
que voc escreveu.
Depois volta e, cheio de orgulho, diz: "Veja s o que eu fiz!", e fica com todo o crdito.

Bloco de Construo: Declarando e Chamando um Mtodo


Geralmente, uma classe tem um ou mais mtodos. Eles fazem alguma coisa, ou seja, executam alguma a o. So chamados
de mtodos porque, neles, ns descrevemos para o computador o mtodo para fazer alguma coisa: as instrues passo a
passo explicando como fazer algo.
Class Person
' Campos
Public firstName As String
Public lastName As String
' Um mtodo
Public Sub ShowFullName()
Console.WriteLine("Name is " & Me.firstName & " " & Me.lastName)
End Sub

End Class

Um smbolo de E comercial, "&", uma forma de acrescentar cadeias de caracteres, uma no final da outra. Lembre-se
tambm de que precisamos de aspas "" em torno de caracteres de texto, mas no de variveis. A aspa simples ' uma forma
de dizer ao computador para ignorar tudo o que h na linha. usada para inserir no cdigo comentrios e observaes a
serem lidos por seres humanos. A palavra "Me" se refere a "este objeto do qual estou falando". Ento, "Me.firstName" se
refere ao campo firstName do objeto atual (que "Jiminy" no exemplo a seguir). Um mtodo posto em ao quando voc
escreve o nome do mtodo, incluindo parnteses, em alguma parte do seu programa.
Dim Jiminy As Person
Jiminy = New Person()
Jiminy.firstName = "Jiminy"
Jiminy.lastName = "Cricket"
Jiminy.ShowFullName()

Quando a linha ShowFullName encontrada, o computador volta e encontra o mtodo com o nome especificado,
percorrendo passo a passo o cdigo escrito nele.

Mais Informaes Sobre Mtodos


No captulo anterior, apresentamos os mtodos, mas h muitas outras informaes sobre eles que no abordamos. Este
captulo trata de alguns dos aspectos mais avanados dos mtodos. No incio, voc poder prosseguir sabendo apenas o
bsico. Mas, em alguma etapa, precisar entender recursos como o envio de valores para um mtodo e a obteno de
valores de um mtodo.

Parmetros
Vamos imaginar que voc tenha pressa em fazer com que o computador escreva o seguinte na tela:
Hello Jo
Hello Sam
Hello You
Eis aqui uma forma de fazer isso Poderamos escrever um mtodo separado para cada situao:
Sub WriteHelloJo()
Console.WriteLine("Hello Jo")
End Sub
Sub WriteHelloSam()
Console.WriteLine("Hello Sam")
End Sub
Sub WriteHelloYou()
Console.WriteLine("Hello You")
End Sub

E depois chamar os mtodos assim:


WriteHelloJo()
WriteHelloSam()
WriteHelloYou()

Mas isso parece um desperdcio de energia, afinal os trs mtodos so quase iguais. E se pudssemos usar um s mtodo
WriteHello e, sempre que o chamssemos, informssemos a parte que deveria ser diferente?
Isso pode ser feito escrevendo o mtodo da seguinte forma:
Sub WriteHello(ByVal someName As String)
Console.WriteLine("Hello " & someName)
End Sub

E chamando-o assim:
WriteHello("Jo")
WriteHello("Sam")
WriteHello("You")

Como voc pode ver, isso economiza espao e esforo. Tente sempre escrever o mnimo possvel de cdigo. Em geral,
quanto menor o programa, mais inteligente o programador.

Quando escrevemos o mtodo desta nova forma, mais inteligente:


Sub WriteHello(ByVal someName As String)
Console.WriteLine("Hello " & someName)
End Sub

Na verdade, estamos dizendo: "Sempre que eu chamar este mtodo, transmitirei a ele uma cadeia de letras contendo um
nome. Seja o que for que eu transmitir, quero que voc escreva depois da palavra Hello."
O elemento entre parnteses (ByVal someName As String) chamado de parmetro. Ele permite que voc transmita um
valor para o mtodo ao cham-lo.
Afinal, quando sua professora lhe ensinou a somar, no ensinou todas as possibilidades existentes, mas sim um mtodo, e
depois apresentou uma srie de problemas diferentes: "Some 2 e 5. Agora, some 7 e 3." como se ela tivesse apresentado a
voc um mtodo chamado AddNumbers e transmitido diferentes parmetros para cada operao. Quaisquer que fossem os
parmetros que ela transmitisse, voc conseguiria calcular a resposta, porque conhecia o mtodo.
Para o computador, o nome que voc atribui a um parmetro no tem a menor importncia mas ele muito meticuloso
quanto ao uso do mesmo nome em todo o mtodo. Isto, por exemplo, funcionar corretamente:
Sub WriteHello(ByVal x As String)
Console.WriteLine("Hello " & x)
End Sub

J isto, no:
Sub WriteHello(ByVal someName As String)
Console.WriteLine("Hello " & someBodysName)
End Sub

Consegue perceber o erro? "someName" e "someBodysName" so diferentes, o que confundir nosso amigo binrio e o
deixar bastante irritado.
Tambm permitido ter mais de um parmetro em um mtodo; voc s precisa separ-los com vrgulas:
Sub WriteHello(ByVal firstName As String, ByVal lastName As String)
Console.WriteLine("Hello " & firstName & " " & lastName)
End Sub

Mas, ento, voc precisar transmitir o nmero certo de valores quando chamar o mtodo:
WriteHello("Jiminy", "Cricket")

Isso, logicamente, escrever na tela "Hello Jiminy Cricket".


Enviando Tipos Errados de Parmetros
Suponha que, na poca em que voc aprendeu a somar, a sua professora tivesse apresentado a voc o seguinte problema:
"Some os nmeros 5 e flor."
Como voc teria respondido? Provavelmente assim: "Flor no um nmero! No possvel somar essas duas coisas." isso
mesmo.
Da mesma forma, o computador se queixar se voc enviar um valor do tipo errado. Esse um erro comum de programao.
Ento, se as coisas no esto funcionando como voc esperava, verifique se enviou valores de tipos correspondentes queles
definidos no mtodo.

Bloco de Construo: Parmetros


Se quisermos transmitir valores especficos para um mtodo, devemos definir os parmetros no mtodo:
Class Person
' Campos
Dim firstName As String
Dim lastName As String
' Mtodo
Public Sub LuckyNumber(ByVal numberOfTeeth As Integer, ByVal age As Integer)
Console.WriteLine("Lucky number is " & numberOfTeeth * age)
End Sub

End Class

Depois, sempre que chamarmos o mtodo, devemos verificar se transmitimos valores do tipo certo nesses parmetros. No
exemplo a seguir, transmitimos dois nmeros inteiros, pois os parmetros para o mtodo "LuckyNumber" foram definidos
como nmeros inteiros.
Dim jiminy As Person
jiminy = New Person()
jiminy.LuckyNumber(24, 14)

Mtodos Que Retornam Valores


Os mtodos que mostramos at aqui apenas escreviam algo na tela e, depois, simplesmente devolviam o controle linha
que os chamou: "J fiz minha parte. Agora com voc." S que, algumas vezes, queremos que o mtodo retorne algum
valor til linha de cdigo que o chamou.
Eis aqui um exemplo. Vamos escrever um mtodo que pesquisa quantas patas tem um animal especfico e, depois, retorna
esse nmero ao recurso que o chamou.
Veja a seguir como poderamos escrever o mtodo. Lembre-se de que, nesta etapa, ensinamos ao computador COMO fazer
alguma coisa. Primeiro, escreverei em portugus o que quero que o computador faa. Depois, escreverei a mesma coisa em
Visual Basic:

Se o animal sobre o qual estamos falando se chama "elephant", ento Number of Legs = 4.
Caso contrrio, se o animal sobre o qual estamos falando se chama "turkey", ento Number of Legs = 2.
Caso contrrio, se o animal sobre o qual estamos falando se chama "oyster", ento Number of Legs = 1.
Caso contrrio, para animais com qualquer outro nome, Number of Legs = 0.
Function NumberOfLegs(ByVal animalName As String) As Integer

If animalName = "elephant" Then


'
' Envia de volta o valor 4
Return 4
ElseIf animalName = "turkey" Then '
' Envia de volta o valor 2
Return 2
ElseIf animalName = "oyster" Then '
' Envia de volta o valor 1
Return 1
Else ' Caso contrrio (sob todas as
' Envia de volta o valor 0
Return 0
End If

Se o nome do animal for igual a "elefante"

Caso contrrio, se for igual a "peru"

Caso contrrio, se for igual a "ostra"

outras condies)

End Function

E, ento, chamamos o mtodo. Vamos cham-lo duas vezes:


1.
2.
3.
4.
5.

Dim i As Integer ' Cria uma varivel "i" do tipo Inteiro


' para armazenar o valor do Nmero de Pernas
i = NumberOfLegs("turkey")
' Agora i = 2 obtido do mtodo NumberOfLegs acima
Console.WriteLine("The turkey has " & i & " legs")
i = NumberOfLegs("monkey")
' Agora i = 0 obtido do mtodo NumberOfLegs acima
Console.WriteLine("The ape has " & i & " legs")

A linha 3 escrever "The turkey has 2 legs" e a linha 5 escrever "The ape has 0 legs". Ento, o mtodo transmitir de volta
um valor, e esse valor retornado poder ser inserido diretamente na linha de cdigo que chamou o mtodo.
Por que definimos o mtodo assim?
Function NumberOfLegs(ByVal animalName As String) As Integer
...
End Function

Em vez de defini-lo assim:


Sub NumberOfLegs(ByVal animalName As String)
...
End Sub

Ou assim:
Private Function NumberOfLegs(ByVal animalName As String) As String
...
End Function

Logicamente, fizemos isso porque queramos que o mtodo retornasse um nmero inteiro nesse caso, e no um valor
"nada", nem uma cadeia de letras. E um tipo de dados para trabalhar com nmeros inteiros "Integer".
Quando escrevemos um mtodo, sempre especificamos o tipo de dados a ser retornado por ele. Se no precisamos que ele
retorne nada, usamos Sub para especificar que ele no retornar "nada".
Sub JustWriteSomething(ByVal someThing As String)
Console.WriteLine(someThing)
End Sub

Por fim, provavelmente voc j descobriu que a palavra "Return" a parte que efetivamente retorna um valor. Assim que o
computador encontra a palavra "Return", ele sai do mtodo e retorna o que tiver sido solicitado.

Bloco de Construo: Valores de Retorno


Algumas vezes, queremos que um mtodo transmita de volta um valor. Nesse caso, em vez de tornar o mtodo um "Sub", o

que significa que "nada ser enviado de volta", usamos uma funo e definimos o tipo de dados especfico que o mtodo
deve retornar.
Class Person
' Campos
Dim firstName As String
Dim lastName As String
' Mtodo
Function LuckyNumber(ByVal numberOfTeeth As Integer, ByVal age As Integer) As Integer
Return (numberOfTeeth * age)
End Function
End Class

O valor retornado estar disponvel automaticamente sempre que chamarmos o mtodo.


Poderamos, por exemplo, usar o valor retornado de uma destas formas:
Poderamos, primeiro, armazenar a resposta em uma varivel e, depois, usar o valor da varivel em uma instruo separada.
Dim Susy As Person
Susy = New Person()
Dim num As Integer = Susy.LuckyNumber(24,14)
Console.WriteLine("Susy's lucky number is " & num)

Ou ento poderamos chamar o mtodo diretamente na nossa instruo WriteLine, da seguinte forma:
Console.WriteLine("Susy s lucky number is " & Susy.LuckyNumber(24, 14))

Mtodos Pblicos, Particulares e Protegidos


Assim como ocorre com os campos (consulte o captulo anterior), os mtodos podem ser chamados a partir de outras
classes. Podemos querer permitir ou impedir isso.
Por padro, todos os mtodos sero tratados como "Private", o que significa que s podem ser usados dentro da prpria
classe. Se voc quiser permitir que outras classes tambm possam cham-los, deve adicionar uma palavra como "Public" no
incio da declarao.
Public Sub JustWriteSomething(ByVal someThing As String)
Console.WriteLine(someThing)
End Sub

Algumas reas no mundo real so "restritas", a no ser que voc tenha uma autorizao especial. Por exemplo, nos
restaurantes, onde apenas os chefs, os garons e as garonetes podem entrar na cozinha, que uma rea "particular". J o
salo de jantar uma rea "pblica", qual todos tm acesso. De forma semelhante, o cdigo pode ser restrito para outras
classes.
Em uma seo anterior, apresentamos um exemplo com campos Private e Public. Vamos ampliar o exemplo e incluir alguns
mtodos Private e Public na classe "Animal", e ento tentar acess-la a partir da classe "Zoo".
Class Animal
Public kindOfAnimal As String
Public name As String
Public numberOfLegs As Integer
Public height As Integer
Public length As Integer
Public color As String
Dim hasTail As Boolean
Protected isMammal As Boolean
Private spellingCorrect As Boolean
' Mtodo pblico que recupera informao sobre a comida que o animal come
Public Function GetFoodInfo() As String
' Imagine que aqui ns tivessemos algum cdigo que pesquisasse em um banco de dados
...
End Function
' Mtodo privado para verificar se o tipo do animal foi escrito corretamente
Private Sub CheckSpelling()
' Imagine que aqui ns tivessemos algum cdigo de verificao de escrita
...
End Sub
' Mtodo protegido que decide se o tipo do animal vlido
Protected Function IsValidAnimalType() As Boolean
' Imagine que aqui ns tivessemos algum cdigo que testasse se os tipos de animais so
vlidos
...
End Sub
...
End Class
Class Zoo
Dim a As Animal = New Animal()
a.name = "Kangaroo"
Dim food As String
Dim animalExists As Boolean
' A linha seguinte ser bem sucedida porque a classe "Zoo" est autorizada

' a usar campos pblicos na classe "Animal"


classfood = a.GetFoodInfo()
' Chama um mtodo pblico
' As linhas seguintes iro FALHAR porque a classe "Zoo" no est autorizada
' a usar campos privados ou protegidos
a.CheckSpelling()
' Tenta acessar um mtodo privado
animalExists = a.IsValidAnimalType()
' Tenta acessar um mtodo protegido
End Class

Mtodos de Construo
Freqentemente, voc ver classes escritas de forma a incluir um tipo de mtodo especial, chamado de "construtor". O
nome de um mtodo construtor sempre New e no h nenhum tipo de retorno includo.
Ele chamado de mtodo construtor porque ajuda a "construir" ou criar o objeto pela primeira vez. uma prtica
recomendada escrever um mtodo construtor nas suas classes.
Class Person
' Campos
Dim firstName As String
Dim lastName As String
' Mtodo construtor para a classe Pessoa
Public Sub New()
firstName = "Johnny"
lastName = "Rocket"
End Sub
End Class

Um mtodo construtor tratado de forma especial ele executado automaticamente sempre que uma instncia da
classe criada.
Lembrete:
Com "uma instncia da classe", queremos dizer um objeto especfico da classe. Por exemplo, na seo anterior sobre
"objetos", destacamos "Jeremy the Gorilla" como um objeto especfico, ou instncia, da classe chamada Animal.
Ento, se executssemos o cdigo a seguir...
Dim p As Person = New Person()
Console.WriteLine(p.lastName)

Descobriramos que ele escreveria a palavra "Rocket". Ao criar um objeto "Person", executamos de forma automtica e
invisvel o mtodo construtor "Person", que define lastName como "Rocket" neste caso.
Eis um exemplo semelhante do mundo real. Quando uma "nova instncia de criana" nasce no hospital, algum
automaticamente vem ao quarto e trata de alguns detalhes para garantir que essa nova instncia seja registrada
adequadamente e esteja pronta, sob os aspectos legais, para participar do mundo, antes mesmo de sair do hospital.

Mdico: Parabns pelo beb! Agora precisamos registr-lo. Qual o nome dele?

Essa ao se assemelha a um mtodo construtor sendo executado em uma classe: antes que a nova instncia da classe tenha
permisso para fazer qualquer coisa, o mtodo construtor executado. Nesse mtodo construtor, voc pode incluir tudo o
que julgar que precisa ser feito automaticamente, antes que o objeto seja considerado "pronto para o mundo".
Construtores Com Parmetros
Voc pode escrever um mtodo construtor incluindo parmetros. Eis um exemplo de classe com dois mtodos construtores
diferentes:
Class Person
' Campos
Dim firstName As String
Dim lastName As String
' Primeiro mtodo construtor
Public Sub New()
firstName = "Johnny"
lastName = "Rocket"
End Sub
' Segundo mtodo construtor
Public Sub New(ByVal f As String, ByVal l As String)
Me.firstName = f
Me.lastName = l
End Sub
End Class

E agora h duas formas diferentes para construir o objeto:


Assim:
Dim p As Person = New Person()

E o campo p.lastName receber automaticamente o valor "Rocket".


Ou assim:
Dim p As Person = New Person("Jiminy", "Cricket")

E o campo p.lastName receber automaticamente o valor "Cricket".


Lembre-se de que a palavra "Me" se refere a "este objeto que estamos criando". Ento, na verdade o cdigo est dizendo
para "definir os campos firstname e lastname do novo objeto com os valores que forem transmitidos para o mtodo
construtor".

Eventos
No mundo real, ocorrem eventos o tempo todo. H alguns que no podemos controlar, como o nascer e o pr-do-sol (tente
e veja se voc consegue fazer o sol nascer e se pr), e h outros que podemos iniciar por opo, co mo a msica que vem
dos alto-falantes de um aparelho de som.

Os eventos no mundo computacional so, geralmente, destes tipos:

um boto clicado;
o tempo de um cronmetro se esgota;
o mouse movido;
uma tecla do teclado pressionada.

Logicamente, se um boto clicado, queremos que o computador faa algo caso contrrio, por que nos daramos ao
trabalho de criar o boto? Mas o computador espera que voc diga que esse clique importante para voc, e tambm que
especifique o que ele deve fazer quando o boto for clicado.
Vamos tomar como exemplo o clique no boto, pois provavelmente o evento mais comum, e explicar como lidar com ele.
Vamos supor que voc tem, no seu programa, um objeto de boto chamado mrButton, com as palavras "Click me" escritas
nele.
Na verdade, que tal experimentar voc mesmo conforme prosseguimos com a explicao? Para comear:

Abra o Visual VB.Net Express clicando em INICIAR -> Todos os Programas -> Microsoft Visual VB.Net 2008 Express
Edition.
Inicie um novo projeto de aplicativo do Windows: selecione File (Arquivo) -> New Project (Novo Projeto) e escolha o
tipo de projeto "Windows application" (Aplicativo do Windows).
O Visual VB.Net Express criar alguns arquivos com um pouco de cdigo estrutural.
Na janela "Solution Explorer", do lado direito (onde todos os arquivos esto relacionados), exclua o arquivo chamado
Form1.vb.

Agora, clique com o boto direito do mouse no nome do projeto, no "Solution Explorer", e selecione .Add (Adicionar)
-> Add New Item (Adicionar Novo Item).

Uma nova janela ser aberta, conforme mostrado abaixo. Escolha "Class" (Classe) e d a ela o nome de "Program.vb".

Clique duas vezes no arquivo chamado Program.vb e exclua todo o cdigo estrutural inserido automaticamente.
Para criar um programa com uma instncia de boto, digite o seguinte cdigo em Program.vb, exatamente como
exibido aqui (exceto pela formatao de algumas palavras em itlico ou negrito, que voc pode ignorar).
Imports System
Imports System.Windows.Forms
Class MyButtonClass

Inherits Form
Private mrButton As Button
' Mtodo construtor
Public Sub New()
mrButton = New Button()
mrButton.Text = "Click me"
Me.Controls.Add(mrButton)
End Sub

' Mtodo principal


Shared Sub Main()
Application.Run(New MyButtonClass())
End Sub
End Class

Execute o programa pressionando a tecla F5 do teclado, ou ento clicando no boto Run (Executar) verde. Se obtiver
alguma mensagem de erro, procure atentamente erros de digitao. Se o programa for executado corretamente,
voc ver um formulrio exibido com um boto chamado "Click me". Neste ponto, o boto no far nada se voc
clicar nele. um pouco desanimador, eu sei, mas chegaremos l.

O Evento de Clique no Boto


Especificando o Que Fazer Quando Ocorre um Evento
Se j sabemos o que deve ser feito quando o boto for clicado, devemos especificar o mtodo pelo qual a ao ser
realizada. Esses tipos de mtodos que informam ao computador o que fazer quando um evento ocorre so chamados de
mtodos manipuladores de eventos, pois "manipulam" um evento. Veja o exemplo do cdigo em negrito a seguir. Tudo o
que ele faz, na verdade, alterar o que est escrito no boto, por isso um mtodo curto.

Imports System
Imports System.Windows.Forms
Class MyButtonClass
Inherits Form
Private mrButton As Button
' Mtodo construtor
Public Sub MyButtonClass ()
mrButton = New Button()
mrButton.Text = "Click me"
Me.Controls.Add(mrButton)
End Sub
' Mtodo principal
Shared Sub Main()
Application.Run(New MyButtonClass())
End Sub
' Mtodo manipulador de evento
Private Sub MyButtonClickEventHandler(ByVal sender As
mrButton.Text = "You clicked me!"
End Sub
End Class

Object, ByVal e As EventArgs)

Seu programa ainda est em execuo?

Interrompa-o (clicando no X no canto superior direito da janela onde o formulrio exibido).


Acrescente ao seu programa o cdigo em negrito acima e pressione F5 para executar o programa atualizado.
Experimente clicar agora no boto "Click me". Argh! Ainda no faz nada, no ?

Se voc leu o captulo sobre mtodos, reconhecer a estrutura bsica do mtodo acima. A palavra "Sub" significa que o
mtodo no retornar "nada" quando for concludo. A palavra "MyButtonClickEventHandler" o nome que escolhemos para
o mtodo.

Ento, as coisas comeam a ficar um pouco complicadas. Provavelmente, voc percebe que h dois parmetros entre
parnteses, mas so estranhos: (ByVal sender As Object, ByVal e As EventArgs). Lamento ter que dar a voc essa m notcia
mas, com mtodos manipuladores de eventos, no podemos criar nossos prprios tipos de parmetros. Quando esse mtodo
chamado, o prprio sistema transmite automaticamente determinados parmetros para ele, e no podemos fazer nada a
respeito.
Precisamos apenas colaborar e escrever sempre nosso manipulador de eventos com os tipos de parmetros esperados. No
caso de um evento de "clique", e tambm de muitos outros eventos, os parmetros transmitidos so dos tipos "object" e
"EventArgs". No exemplo acima, escolhemos os nomes de parmetros "sender" e "e", mas poderamos ter escolhido
quaisquer nomes o computador exigente apenas em relao aos tipos de parmetros. O exemplo a seguir funcionaria
exatamente da mesma forma que o mostrado acima. Se quiser, voc pode comprovar isso alterando os nomes dos
parmetros no seu programa para "x" e "y".
Private Sub MyButtonClickEventHandler(ByVal x As Object, ByVal y As EventArgs)
mrButton.Text = "You clicked me!"
End Sub

O primeiro parmetro normalmente contm informaes sobre o que ocasionou o evento. O segundo parmetro tem
relao com as informaes sobre o evento propriamente dito.
Tambm vale a pena observar que, embora o sistema sempre transmita alguns valores nesses dois parmetros, geralmente
voc no precisar us-los, pois eles so enviados para o mtodo manipulador de eventos "apenas por precauo".
Vinculando o Mtodo Manipulador de Eventos ao Evento
Est imaginando por que o boto no faz nada quando voc clica nele? O mtodo acima s ser chamado se ns
vincularmos a ele o evento de "clique" do boto. Em alguma parte do programa, precisamos dizer: "Quando este boto for
clicado, v para o manipulador de eventos."
Na verdade, isso bvio: se voc tivesse vrios botes e vrios manipuladores de eventos, como o computador saberia qual
mtodo executar para cada clique em um boto?
O cdigo para vincular o evento de um objeto a um mtodo manipulador de eventos tambm um pouco estranho. Est
destacado em negrito a seguir.

Imports System
Imports System.Windows.Forms
Class MyButtonClass
Inherits Form
Private mrButton As Button
' Mtodo construtor
Public Sub MyButtonClass()
mrButton = New Button()
mrButton.Text = "Click me"
mrButton.Click += New System.EventHandler(MyButtonClickEventHandler)
Me.Controls.Add(mrButton)
End Sub
' Mtodo principal
Shared Sub Main()
Application.Run(New MyButtonClass())
End Sub
' Mtodo manipulador de evento
Private Sub MyButtonClickEventHandler(ByVal sender As Object, ByVal e As EventArgs)
mrButton.Text = "You clicked me!"
End Sub
End Class

Voc poderia traduzir isso do mundo da computao para o nosso desta forma:

Acrescente ao evento de "clique" do boto um novo mtodo manipulador de eventos: aquele que escrevi, chamado
MyButtonClickEventHandler.
Ento, quando voc clicar no boto, a linha de cdigo acima far com que o programa seja direcionado ao seu mtodo
manipulador de eventos. Quando o mtodo for executado, o texto escrito no boto ser alterado para "You clicked me!".
Para experimentar, interrompa seu programa, acrescente o cdigo em negrito acima (verifique se est no lugar certo) e
pressione F5 para execut-lo novamente. Clique no boto e o texto ser alterado. Consulte o Programa 5 na pasta de
exemplos deste livro para ver um exemplo funcional do evento de clique em um boto.

Eventos de Mouse
Esta a estrutura bsica de um mtodo manipulador de eventos para manipular eventos de mouse. Neste caso, provvel
que voc queira usar as informaes transmitidas no parmetro MouseEventArgs para descobrir, por exemplo, qual dos
botes do mouse est sendo pressionado.
Public Sub TheMouseIsDown(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left Then
Me.Text = "Left mouse button just went down"
End If
End Sub

E esta a forma como voc vincularia um evento a ele. Este exemplo diz ao computador que "se o boto do mouse for
pressionado enquanto o programa executado, v para o mtodo chamado TheMouseIsDown", um tipo de mtodo que
sabe como manipular eventos de mouse:
Me.MouseDown += New MouseEventHandler(TheMouseIsDown)

Voc pode fazer algo um pouco mais sofisticado. Quando o manipulador a seguir for disparado, o cdigo que escrevemos
nele tornar toda a janela maior ou menor, dependendo de qual o boto clicado.
Public Sub TheMouseWasClicked(ByVal sender As Object, ByVal e As MouseEventArgs)
' Se o boto esquerdo for clicado
If e.Button = MouseButtons.Left Then
' Aumenta a largura da janela atual
Me.Width = Me.Width + 100
Else If e.Button = MouseButtons.Right Then
' Diminui a largura da janela atual
Me.Width = Me.Width - 100
End If
End Sub

E este manipulador de eventos de mouse detecta qualquer movimento do mouse, desenhando um crculo na sua posio
atual:
Public Sub TheMouseMoved(ByVal sender As Object, ByVal e As MouseEventArgs)
' Prepara a superfcie de desenho
Dim g As System.Drawing.Graphics = Me.CreateGraphics()
' Usa uma caneta vermelha
Dim redPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Red, 3)
' Desenha um crculo (uma elipse com altura e largura iguais)
' nas coordenadas X e Y atuais do mouse
g.DrawEllipse(redPen, e.X, e.Y, 40, 40)
' Limpa
g.Dispose()
End Sub

Esta captura de tela mostra o que exibido quando o mouse movido:

Namespaces
Os Namespaces e o Servio dos Correios
Deve haver centenas, ou talvez milhares de ruas no mundo chamadas "Main Street". Como uma carta enviada a algum na
"Main Street" chega ao lugar certo? Logicamente, a resposta que h mais elementos no endereo. Em geral,
acrescentamos pelo menos os nomes da cidade e do pas.

Logicamente, se escrevermos:

17 Main Street
82 Main Street

No mostraremos a diferena entre as ruas e o carteiro ficar terrivelmente confuso.


Em vez disso, poderamos escrever:

17 Main Street. Londres.


82 Main Street. Nairbi.

J melhorou, mas, e se existissem duas cidades chamadas Londres? Seria melhor acrescentar tambm o nome do pas.

17 Main Street. Londres. Reino Unido.


82 Main Street. Nairbi. Qunia.

Tambm funcionaria escrever tudo na ordem inversa:

Reino Unido. Londres. Main Street. 17.


Qunia. Nairbi. Main Street. 82

Agora, a carta deve chegar ao seu destino sem problemas. No segundo caso, por exemplo, seguir por via area para o
Qunia. Do aeroporto, ser enviada para a cidade de Nairbi. Ao chegar l, um carteiro a levar at a Main Street e
encontrar o nmero 82.
O formato [Qunia.Nairbi.MainStreet] pode ser considerado um tipo de "namespace" para o envio de cartas.
Os Namespaces e o Cdigo de Programao
E o que isso tem a ver com programao?
Imagine que a Microsoft escreveu uma classe chamada "Point", usada para desenhar uma forma em um ponto especfico,
mas voc tambm escreveu uma classe chamada "Point" digamos que ela carrega a figura de uma pessoa apontando.
claro que as duas classes executam aes totalmente diferentes, mas faz sentido que as duas se chamem "Point". Como os
programas sabero qual das duas utilizar?
Logicamente, faria sentido diferenciar os nomes de alguma forma. O modo de fazer isso no .NET usando namespaces
diferentes. Por exemplo:

Microsoft.Drawing.Point
Susy.PictureStuff.Point

O nome das classes o mesmo ("Point"), mas o "namespace" antes do nome da classe estabelece claramente a distino
entre elas. Se eu quisesse usar a classe Point da Susy, poderia criar um objeto Point usando o mtodo construtor da seguinte
forma:
Dim SusyPoint As Susy.PictureStuff.Point = New Susy.PictureStuff.Point()

E, para usar a classe Point da Microsoft, eu escreveria:


Dim MicrosoftPoint As Microsoft.Drawing.Point = New Microsoft.Drawing.Point()

Embora meus dois objetos sejam do tipo de classe "Point", eles se comportaro de forma bastante diferente.
Como Atribuir Sua Classe um Namespace
muito fcil incluir sua classe em um namespace. Em vez de simplesmente escrever a classe assim:
Class Animal
...
End Class

Encapsule-a em algo assim:


Namespace Susy
Class Animal
...
End Class
End Namespace

Ou assim, se preferir:
Namespace Susy.FunStuff
Class Animal
...
End Class
End Namespace

Voc pode criar qualquer namespace que faa sentido. Basta separar as palavras com um ponto ".".
No ltimo exemplo acima, a classe Animal aparece no namespace Susy.FunStuff.
Voc descobrir tambm que todas as bibliotecas de cdigo da Microsoft, assim como as de outras organizaes, so
colocadas em namespaces. Ento, para usar seu cdigo, necessrio entender como trabalhar com namespaces.

Bloco de Construo: Namespaces


Para fazer a distino entre as classes e agrupar logicamente classes semelhantes, uma prtica recomendvel sempre
colocar uma classe em um namespace adequado.
Namespace Charles.SchoolUtilities
Class Animal
End Class
End Namespace

Seria possvel criar uma instncia ou um objeto da classe acima usando o mtodo construtor de classes desta forma:
Dim cat As Charles.SchoolUtilities.Animal = New

Charles.SchoolUtilities.Animal()

Ou, se fssemos usar em nosso programa vrios objetos do mesmo namespace e no quisssemos escrever
"Charles.SchoolUtilities"vrias vezes, poderamos usar a palavra-chave "Imports" na parte superior do programa, indicando
ao computador o uso desse namespace no programa dali em diante. Por exemplo:
' Diz ao computador que ns iremos usar classes deste namespace
Imports Charles.SchoolUtilities
' Cria um objeto Animal a partir do namespace Charles.SchoolUtilities
Dim cat As Animal = New Animal()

Herana
Este livro se destina a ensinar como comear a programar, portanto, no queremos confundi-lo com muitas informaes
complicadas. Ento, no falaremos muito sobre herana.
No entanto, voc pode, algumas vezes, ver classes declaradas assim:
Class MyFancyClass
Inherits Form
...
End Class

E no assim:
Class MyFancyClass
...
End Class

Por isso, vamos explicar do que se trata a parte que vem depois da palavra "Inherits".
Herana de Pessoas

comum as pessoas herdarem caractersticas de seus pais. Voc tem a cor de cabelo da sua me e o nariz do seu pai.

Isso no significa que voc idntico sua me e ao seu pai em todos os aspectos, mas sim que certas caractersticas
vieram "incorporadas" quando voc nasceu. Mas voc tambm tem vrias caractersticas e habilidades exclusivas, que so s
suas e vo alm daquelas possudas pelos seus pais.
Herana de Cdigo
Quando escrevemos cdigo de programao, pode ser extremamente til ter acesso a algo assim poder herdar uma srie
de habilidades de uma classe j existente, sua ou de outra pessoa.
Eis um exemplo. Definimos duas classes, "Animal" e "Bird", mas a classe "Bird" herdeira da classe Animal.
Class Animal
Public kindOfAnimal As String
Public name As String
Public numberOfLegs As Integer
Public height As Integer
Public length As Integer
Public color As String
Dim hasTail As Boolean
Protected isMammal As Boolean
Private spellingCorrect As Boolean

End Class
Class Bird
Inherits Animal
' A classe "Passro" herda a classe "Animal"
Public featherColor As String
...
End Class

No mundo real, um pssaro um tipo de animal, mas tem algumas caractersticas que no se aplicam a todos os animais.
Ento, faz sentido que a classe Bird tenha todas as caractersticas da classe Animal, e mais algumas extras. Neste caso,
identificamos um campo especial somente para os pssaros: featherColor.
Ento, quando escrevemos:
Class Bird
Inherits Animal
...
End Class

Na verdade, estamos dizendo: "Estou definindo uma nova classe chamada Bird, mas ela deve herdar tudo automaticamente
da classe Animal." Geralmente dizemos que a classe Bird derivada da classe Animal.
Quando criamos uma instncia de "Bird", podemos enderear diretamente os campos de Animal e Bird (se no forem
particulares):
Dim b As Bird = New Bird()

b.kindOfAnimal = "Tawny Eagle"


b.isMammal = False
b.featherColor = "Tawny"

Para maior clareza, deixamos de lado os mtodos nas classes Animal e Bird acima, mas o mesmo se aplica aos mtodos. Uma
classe derivada pode chamar qualquer mtodo na classe pai, desde que no tenha sido declarado como particular.
Outro exemplo herdando algumas habilidades de janelas para o seu programa
Suponha que voc queira escrever um programa executado em uma "janela" tpica. Ela deve ser dimensionvel, maximizvel,
minimizvel, arrastvel etc. Faz sentido que a sua classe "herde" habilidades de uma classe que j trabalha com esse tipo de
interface. A classe System.Windows.Forms.Form a opo mais comum.
Ento, quando escrevemos:
Class MyFancyClass
Inherits Form
...
End Class

Na verdade, estamos dizendo: "Estou escrevendo minha prpria classe, mas ela deve herdar automaticamente todos os
recursos da classe Form."
Esse debate se torna mais prtico na parte III, o captulo sobre System.Windows.Forms.
Quando Usar a Herana
Voc no precisa herdar de uma classe para us-la! A herana mais bem aproveitada em casos onde a maior parte do que
voc deseja realizar j feito por uma classe existente, e voc s precisa estend-la ou personaliz-la.

Bloco de Construo: Herana


possvel fazer com que uma classe herde as caractersticas e as habilidades de outra classe.
No exemplo a seguir, a classe "Guitarist" herda trs campos da classe "Musician" e acrescenta dois campos prprios.
A palavra "Inherits" informa ao computador para fazer com que a nova classe (Guitarist) herde da classe escrita direita da
palavra Inherits.
Public Class Musician
Public name As String
Public ageInYears As Integer
Public canSing As Boolean
End Class
Public Class Guitarist
Inherits Musician
Public guitarType As String
Public guitarBrand As String
End Class
Dim g As Guitarist = New Guitarist()
g.name = "Jimbo van Helsdingen"
g.ageInYears = 28g.canSing = False
g.guitarType = "Acoustic"
g.guitarBrand = "Gibson"

Parte III A Linguagem Visual Basic


Quando algum aprende a ler e escrever em um novo idioma, geralmente esse aprendizado inclui pelo menos:

Vocabulrio as palavras do idioma


Gramtica como organizar as palavras corretamente, da forma aceita por todos. Isso inclui conhecimentos como
estrutura adequada das frases e pontuao.
Compreenso compreender o significado do que est escrito. Compreender significa entender.

Os mesmos princpios bsicos se aplicam quando preciso aprender a ler e escrever uma linguagem de computao. H
algumas palavras bsicas e outros elementos que so as peas usadas para compor seus programas. Voc combina essas
peas de formas especficas, criando conjuntos semelhantes a frases, inclusive com marcas de pontuao. Tudo isso se
destina a transmitir determinado significado ao computador.
No vamos dividir nossas lies usando exatamente os mesmos cabealhos acima, mas voc ver esses aspectos surgirem
nos captulos seguintes.

Vocabulrio
Assim como nos idiomas, o Visual Basic tem um determinado nmero de palavras que participam diretamente da
linguagem, mas h palavras adicionais, exteriores linguagem, que podem ser includas nela legalmente.
Em portugus, voc poderia escrever: "Um gorila chamado Juju vive na floresta de Uganda." A maioria dessas palavras faz
parte do idioma portugus, e voc pode encontr-las no dicionrio. Mas as palavras "Juju" e "Uganda" no, pois so nomes
prprios. Isso significa que a frase est incorreta? No, pois permitido usar palavras:

da lista de todos os nomes de seres humanos e animais;


da lista oficial de nomes de pases;
...e de muitas outras listas de palavras.

Da mesma forma, mencionaremos palavras que participam diretamente da linguagem Visual Basic. Mas isso no significa
que voc usar somente essas palavras em seus programas. Dependendo do que quiser expressar, provavelmente voc
utilizar muitas palavras extras, emprestadas de outras listas, bibliotecas etc. A Microsoft, em particular, escreveu uma vasta

biblioteca de cdigo chamada biblioteca de classes .NET Framework, que voc com certeza utilizar nos seus programas em
Visual Basic. Ela contm muitos nomes de classes, campos e mtodos que no so internos ao Visual Basic, mas que voc
pode usar nos seus programas em Visual Basic.
Voc mesmo definir novas classes, campos e mtodos, atribuindo-lhes nomes e esses nomes se tornaro palavras que
voc poder usar legalmente nos programas em Visual Basic. como criar um novo nome, "PatasRajadas", para o seu animal
de estimao. Ento, voc est autorizado a usar esse nome em frases em portugus.
Eis aqui algumas palavras internas linguagem. Algumas delas, voc precisar conhecer para escrever programas bsicos.
Todas so mencionadas neste livro.

Class
Do
Else
False
For
If
Integer
New
Nothing
Private
Protected
Public
Return
Shared
String
Me
True
Imports
Loop
While

Essa no uma lista completa, mas no se preocupe: no h muitas palavras em Visual Basic alm dessa lista. As linguagens
de computao tendem a ter muito menos palavras do que os idiomas.
O que voc faz com as palavras que compem um idioma? Voc as combina em frases bem estruturadas, de acordo com
certas regras. Isso se chama gramtica. Esse o assunto dos demais captulos desta seo.

Algumas Regras Gerais de Gramtica


Neste captulo, abordamos algumas informaes gerais sobre a gramtica no Visual Basic. Em termos tcnicos, isso
geralmente chamado de sintaxe.

Letras Maisculas e Minsculas


A linguagem Visual Basic geralmente no diferencia maisculas de minsculas, embora transforme as palavras -chave de
acordo com uma configurao padro de maisculas e minsculas (a primeira letra maiscula e as demais so minsculas,
na maioria dos casos) e imponha o uso de maisculas e minsculas em nomes de variveis para se adequar forma adotada
no nome fornecido durante a declarao.
Palavras Internas
As palavras-chave listadas no captulo anterior precisam ser sempre escritas exatamente como so mostradas aqui.
Se voc escrever a palavra "IF" em vez de "if", ela simplesmente ser convertida para "If".
Nomes Criados por Voc

E quanto s palavras criadas por voc? Imagine, por exemplo, que voc criou uma classe chamada "myClass", com um
campo chamado "numberOfSpots".
Class myClass
Dim numberOfSpots As Integer
End Class

O uso de maisculas e minsculas importa? A resposta sim e no.


Sim porque, sempre que voc mencionar esses nomes em um programa em Visual Basic, precisar escrev -los exatamente
como foram originalmente definidos. O cdigo a seguir, por exemplo, funcionar, pois "x.NUMBEROFSPOTS" ser convertido
automaticamente em "x.numberOfSpots".
Class myClass
' Campo
Dim numberOfSpots As Integer
' Mtodo
Public Sub Main()
Dim x As MyClass = New MyClass()
x.NUMBEROFSPOTS = 365
End Sub
End Class

O cdigo acima ser convertido no cdigo mostrado a seguir:


Class myClass
' Campo
Dim numberOfSpots As Integer
' Mtodo
Public Sub Main()
Dim x As myClass = New myClass()
x.numberOfSpots= 365
End Sub
End Class

No porque, se voc optar por escrever um nome de classe, campo, mtodo etc. com uma combinao de letras maisculas
e minsculas, digamos, NuMbErOfSpOtS, no poder ter outro nome de classe, campo, mtodo etc. como numberofspots
ou NUMBEROFSPOTS etc.

Instrues
Em portugus, temos perodos, declaraes, oraes, frases etc. Todas essas so diferentes formas de combinar palavras.
Cada uma delas termina com uma marca de pontuao especfica. Um perodo termina com ponto (tambm chamado de
ponto final). Uma orao pode terminar com ponto-e-vrgula (;).
No Visual Basic, isso um pouco mais simples. Usamos basicamente instrues, que em geral terminam com uma nova
linha.

Professor: Quero instrui-los sobre...

Aqui, por exemplo, temos um trecho de cdigo com quatro instrues:


Dim x As String
x = "Nobody wins in war"
Dim m As myClass = New myClass()
m.numberOfSpots = 3

No Visual Basic, preciso colocar cada instruo em uma nova linha para que o computador entenda cada uma delas.
Posso apostar que muitos erros encontrados nos seus programas ocorrem porque voc se esqueceu de escrever instrues
diferentes em linhas separadas. Mas, depois de se esquecer disso umas 5 mil vezes, voc provavelmente vai adquirir o
hbito. Felizmente, o Visual Basic Express inteligente o bastante para perceber que voc deixou de lado detalhes como
esse, usando uma linha ondulada ou outro mecanismo para mostrar como voc foi distrado.

Blocos de Cdigo Agrupando Instrues


Em portugus, usamos pargrafos para agrupar perodos diretamente relacionados.
No VB.Net, usamos a palavra-chave "End" para encerrar um bloco que agrupa vrias instrues.

Vejamos um exemplo. Suponha que temos um programa que faz perguntas ao usurio e verifica as respostas. Suponha que
queremos fazer somente duas coisas se algum responder corretamente. Podemos escrever cdigo desta forma:
If userAnswer = correctAnswer Then
Console.WriteLine("That is correct")
score = score + 1
End If
AskNextQuestion()

As duas instrues dentro do bloco "If... End if" sero executadas se a resposta do usurio for a correta, pois foram
agrupadas em um bloco.
Voc j viu muitos outros exemplos de blocos terminados com "End" neste livro. Sempre que uma classe definida, voc
coloca todo o cdigo dela dentro do bloco "Class... End Class":
Class MyClass
Dim numberOfSpots As Integer
End Class

E, quando escreve um mtodo na sua classe, voc tambm agrupa suas instrues com "Sub... End Sub":
Class MyClass
Dim numberOfSpots As Integer
Public Sub Main()
Dim x As MyClass = New MyClass()
x.numberOfSpots = 365
End Sub
End Class

Da mesma forma, voc agrupa as instrues de uma funo com "Function... End Function".

Comentrios Ajudando os Humanos


Voc j deve ter percebido que muitos livros tm notas ou comentrios escritos nas laterais ou na parte inferior das pginas.
Esses comentrios no fazem parte do texto principal, mas geralmente so informaes extras que explicam em mais
detalhes algum aspecto do texto principal.
Voc deve estar imaginando se pode fazer o mesmo nos seus programas de computao, e pode. Muitas vezes, voc vai
querer escrever comentrios para voc mesmo ou para outros programadores, a fim de explicar as caractersticas do seu
cdigo. Na verdade, esse considerado um bom comportamento entre os programadores. claro que um programador
deve ser capaz de descobrir o que acontece em um programa, mas no preciso perder tempo com isso se um breve
comentrio em ingls pode fornecer rapidamente uma explicao bsica do que o cdigo faz.
E se voc estiver pensando, "sou a nica pessoa que vai ler o meu cdigo", acredite que, quando voc voltar ao programa
depois de alguns meses, vai lamentar no ter comentado seu prprio cdigo.
Como esses comentrios se destinam a pessoas, e no ao computador, voc precisa, de alguma forma, dizer ao computador
para ignorar o que voc escrever na seo de comentrios. Voc precisa "ocultar" esses comentrios dos "olhares digitais".

Computador: Ah, esta coisa s para humanos. Irei ignor-la.

Para fazer um comentrio em uma linha, voc pode simplesmente colocar um caractere ' no incio dela.
O trecho de cdigo a seguir mostra o uso de comentrios:
Private Sub DrawCircleInSquare(ByVal left As Integer, ByVal top As Integer, ByVal size As Integer)
' Este um mtodo para desenhar um crculo vermelho
' O tamanho do crculo passado atravs do parmetro 'tamanho'
' A posio para desenh-lo passada atravs dos parmetros 'esquerda' e 'topo'
Dim g As Graphics = Me.CreateGraphics()
Dim redPen As Pen = New Pen(Color.Red,3)

' Prepara
' Usa uma caneta vermelha

' Desenha um quadrado (um retngulo com altura e largura iguais)


g.DrawRectangle(redPen, left, top, size, size)
' Desenha um crculo (uma elipse com altura e largura iguais)
g.DrawEllipse(redPen, left, top, size, size)
' Limpa
g.Dispose()
End Sub

Quando o computador encontra o caractere ', ele ignora tudo o que h no restante da linha.

Acrescentando Recuos ao Cdigo


provvel que voc j tenha percebido que tendemos a incluir recuos no cdigo da seguinte forma:
If userAnswer = correctAnswer Then

Console.WriteLine("That is correct")
score = score + 1
If score > 10 Then

Console.WriteLine("You have qualified!")


Else

Console.WriteLine("Bugger. Keep going ...")


End If
End If

Fazemos isso em vez de escrever o cdigo todo misturado, desta forma:


If userAnswer = correctAnswer Then
Console.WriteLine("That is correct")
score = score + 1
If score > 10 Then
Console.WriteLine("You have qualified!")
Else
Console.WriteLine("Bugger. Keep going ...")
End If
End If

Isso tem como objetivo tornar claro onde um bloco especfico de cdigo comea e termina. medida que seus programas
se tornarem mais longos, ser cada vez mais difcil ver o incio e o final de um bloco. Os recuos facilitam muito a leitura do
cdigo e de seu significado.

Deixar de utilizar recuos no interrompe o cdigo, pois os recuos no so uma exigncia gramatical. No entanto, so
considerados uma "prtica recomendada" e convm criar esse hbito.
Para recuar o cdigo ao escrever no Visual Basic Express, voc pode selecionar uma ou mais linhas de cdigo e clicar na tecla
TAB do teclado. Se precisar fazer o oposto, mantenha pressionada a tecla SHIFT e pressione TAB. Como alternativa, voc
pode clicar nos

cones da barra de ferramentas.

Variveis
A palavra "varivel" significa "algo que pode ser alterado". Uma varivel um elemento cujo valor pode mudar.
Eis uma forma tpica de uso de uma varivel. Escolhemos, neste caso, chamar a varivel de "theAnswer", pois queremos que
ela contenha a resposta de uma soma, embora pudssemos escolher qualquer outro nome.
Private Function addPositiveNumbers(ByVal x As Integer, ByVal y As Integer) As Integer
Dim theAnswer As Integer
If (x > 0) && (y > 0) Then
' Se x e y forem nmeros positivos
theAnswer = x + y
' Adiciona-os e coloca a soma em resposta
Else
' Caso contrrio
theAnswer = 0
' Coloca zero em resposta
End If
Return theAnswer
End Function

Neste exemplo, a varivel "theAnswer" usada para reter a soma do que for passado nos parmetros x e y. No final,
enviamos de volta o valor que estiver retido em theAnswer.
interessante observar que "theAnswer" , na verdade, apenas um local na memria do computador. Quando o computador
se depara com a linha "Dim theAnswer As Integer", ele encontra um ponto livre na sua memria e o nomeia como
"theAnswer". Quando alcana a linha "Return theAnswer", ele busca o nmero que estava armazenado no local chamado
"theAnswer". No exemplo acima, como j terminou tudo o que deveria fazer, o computador libera aquele espao na
memria para outras finalidades.

Na Verdade, No To Estranho

Quando ns, humanos, trabalhamos com nosso crebro, tambm usamos locais na memria para reter respostas; s que
fazemos isso quase sem perceber. Imagine que algum pea a voc para:

somar os nmeros 10, 20 e 50;


depois, multiplicar a resposta por 2.

Provavelmente, voc faria o seguinte:

Resolver a soma 10 + 20. Reter a resposta (30) na sua memria.


Resolver a soma 30 + 50. Reter a nova resposta (80) na sua memria.
Resolver a multiplicao 80 x 2. Reter a resposta na sua memria at estar pronto para transmiti-la pessoa que fez a
pergunta.
Depois de fazer o que precisava, voc deixa de se esforar tanto para lembrar-se da resposta, afinal, ela no tem mais
valor. Em vez disso, voc libera sua memria para ser usada em outras coisas.

Ento, no somos to diferentes dos nossos amigos digitais.


As Variveis So Sempre de um Tipo Especfico
Na verdade, uma varivel muito parecida com um campo ou um parmetro, exceto pelo fato de no ter nenhuma relao
direta com uma classe ou um objeto especfico precisamos apenas de um local temporrio para armazenar algum
elemento, de forma a poder trabalhar com ele.
Mas as variveis, assim como os campos (que so, na verdade, uma espcie de varivel), so sempre de um tipo especfico.
Por exemplo:
Dim myString As String
Dim theAnswer As Integer
Dim isFinished As Boolean

Se voc ainda no leu o captulo "Os campos e seus tipos", deveria l-lo para compreender melhor os "tipos".

Operadores
Suponha que voc escreva o seguinte em um dos seus programas:
Dim theAnswer As Integer = x + y

E, em outro lugar, escreva:


Dim theAnswer As Integer = x - y

No primeiro caso, voc est usando o smbolo de adio e, no segundo caso, o de subtrao. Essas aes realizadas com
nmeros so chamadas de operaes e seus smbolos + e - so chamados de operadores, pois operam nos elementos. Um
operador toma um ou mais elementos, opera neles e apresenta um valor resultante.
A figura a seguir ilustra o operador de adio, atuando em 2 nmeros. Neste exemplo, ele toma os valores 5 e 2 como
entrada e apresenta como resultado o valor 7.

E aqui est o operador de subtrao, tomando os mesmos valores como entrada, mas apresentando um valor diferente
como resultado:

Todas as linguagens de computao tm pelo menos alguns operadores, e muito importante familiarizar-se com eles.
Ento, vamos abordar aqueles que voc provavelmente ver com freqncia no Visual Basic.

Smbolo

Operao

somar 2 elementos

Explicao

Quando utilizado com tipos numricos, funciona como na matemtica. Por exemplo,
25 + 5 resulta no nmero 30.
Quando utilizado com cadeias de caracteres, ele une as cadeias.
Por exemplo, "how" + " are" + " you" produz a cadeia de caracteres mais longa
"how are you".

subtrair dois
elementos

dividir

multiplicar

>

Maior do que

Exemplo 1: escrever 5 > 2 resulta na resposta "True".


Exemplo 2: escrever 5 > 17 resulta na resposta "False".

<

Menor do que

Exemplo 1: escrever 2 < 3 resulta na resposta "True".


12 < 11 resulta na resposta "False".

Definir como igual a

usado para definir uma varivel como igual a determinado valor.


Exemplo 1: Dim x As Integer= 512
Exemplo 2: Dim y As String= "Hello how are you"

==

Testar se igual a

usado para verificar se dois elementos so iguais.


Exemplo 1: 13 = 70 logicamente resulta na resposta "False".
Exemplo 2: x = 15 resulta na resposta "True" se x tem o valor 15.
Exemplo 3: "HELLO" = "hello".ToUpperCase() resulta na resposta "True".

<=

Menor ou igual a

Exemplo 1: escrever 2 < = 3 resulta na resposta "True".


Exemplo 2: escrever 2 < = 2 resulta na resposta "True".
Exemplo 3: escrever 2 < = 1 resulta na resposta "False".

>=

Maior ou igual a

Exemplo 1: escrever 23 > = 23 resulta na resposta "True".


Exemplo 2: escrever 23 > = 2 resulta na resposta "True".
Exemplo 3: escrever 23 > = 33 resulta na resposta "False".

Not

No

<>

Diferente de

And

Como na matemtica. Por exemplo, 25 - 5 resulta no nmero 20.

Como os teclados no tm uma tecla , a barra usada com o significado de


"dividir". Por exemplo, 20 / 5 resulta no nmero 4.
A multiplicao funciona como na matemtica. Por exemplo, 25 * 5 resulta no
nmero 125.

Exemplo: Not( 5 > 17 ) significa que "no o caso que 5 > 17". A resposta ser
"True", pois no verdade que 5 seja maior do que 17.

Torna mais fcil verificar se algo "diferente de".


Exemplo: 5 <> 12 resulta na resposta "true", porque 5 diferente de 12.

Permite testar se mais de uma afirmao verdadeira. O exemplo a seguir verifica se

a senha e o nome do usurio esto corretos:


If (pwd = "Pass") And (user = "jim") Then Return True
Voc poderia, com a mesma facilidade, testar mais de duas condies. No h limite
para quantas vezes que voc pode usar && em uma instruo.
Or

Ou

&

somar 2 cadeias de
caracteres

A palavra-chave "Or" permite verificar se qualquer uma entre vrias afirmaes


verdadeira. O exemplo a seguir verifica se a cor favorita verde OU se a idade
maior do que 12.
If (favcolor = "green") Or (age < 12) ThenReturn True
Une as cadeias de caracteres.
Por exemplo, "how" & " are" & " you" produz a cadeia de caracteres mais longa
"how are you".
Geralmente, & usado em vez de + no Visual Basic.

Converso Entre Tipos


Suponha que inclumos o seguinte cdigo em um programa:
' Declara algumas variveis
Dim x As Integer
Dim y As String
Dim z As Integer
' Coloca os valores em x e y
x = 5
y = "17"
' Calcula o produto de x e y, e coloca a resposta em z
z = x * y

A ltima linha funcionaria neste caso. A varivel "z" teria o valor 85.
No Visual Basic, o resultado depende da verificao do tipo de dados. O Visual Basic geralmente permite a converso
implcita de qualquer tipo de dados em qualquer outro tipo de dados. Pode ocorrer perda de dados quando o valor de um
tipo de dados convertido em um tipo de dados com menor preciso ou menor capacidade; no entanto, uma mensagem de
erro de runtime ocorrer se a converso falhar.
Analise o exemplo a seguir:
' Declara algumas variveis
Dim x As Integer
Dim y As String
Dim z As Integer
' Coloca os valores em x e y
x = 5
y = "funny"
' Calcula o produto de x e y, e coloca a resposta em z
z = x * y

Tambm nesse caso, no haveria erro em tempo de compilao. No entanto, quando voc executar o programa, receber a
seguinte mensagem de erro:
"Conversion from string "funny" to type 'Double' is not valid." (A converso da cadeia de caracteres "funny" para o tipo
"Double" no vlida.)
Para garantir que essa verificao seja feita em tempo de compilao, precisamos definir Option Strict como On. Option
Strict garante as notificaes em tempo de compilao desses tipos de converses.

Agora, a ltima linha acima causaria um erro em tempo de compilao o computador reclamaria porque no possvel
multiplicar cadeias de caracteres, e y um tipo de cadeia de caracteres.

Com Option Strict On, possvel converter cadeias de caracteres em nmeros. O exemplo a seguir mostra como voc
poderia contornar esse problema, pois a cadeia de caracteres "17" seria facilmente convertida no nmero 17. Bastaria uma
pequena alterao na ltima linha.
z = x * Convert.ToInt32( y )

O que fizemos foi usar a classe da Microsoft chamada "Convert" e chamar seu mtodo "ToInt32", que faz a converso para
um dos tipos inteiros. Agora que y foi convertido em um nmero inteiro, o computador multiplicar os dois nmeros sem
problemas.
A classe "Convert" tem muitos outros mtodos, mas voc precisar com mais freqncia dos seguintes:

Convert.ToInt32()
Convert.ToString()
Convert.ToBoolean()

O Visual Basic tambm conta com funes de converso como CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj,
CShort, CSng e CStr.
Observe que Option Strict definida como Off por padro no Visual Basic.
importante lembrar-se de como os computadores so meticulosos em relao aos tipos.

Mulher: Isto no vai funcionar voc no o meu tipo


Rapaz: Mas eu posso mudar!

Transmisso
Outra forma de alterar valores de um tipo para outro com o uso de um recurso chamado transmisso. Transmitir algo
significa convert-lo em um tipo diferente. S que, ao contrrio dos exemplos de "Convert" acima, a transmisso s funciona
quando o tipo a partir do qual feita a alterao muito semelhante ao tipo para o qual feita a alterao. Isso til, p or
exemplo, para fazer a converso entre dois tipos numricos, mas intil para a converso entre um nmero e uma cadeia de
caracteres.

O Visual Basic fornece duas opes de transmisso: CType e DirectCast. A principal diferena entre as duas que DirectCast
s funciona se o tipo especificado e o tipo de runtime da expresso fore m iguais. Essa diferena s aparece quando voc faz
a converso de um tipo de objeto para um tipo de valor, ou ento quando faz a desconverso de um valor.
Por exemplo, a seguinte operao DirectCast falhar, pois o tipo convertido do objeto O no um nmero inteiro:
Dim Obj As Object = 1.5
Dim Int As Integer = DirectCast(Obj, Integer) ' Provoca um erro de run-time (tempo de execuo)
Dim Int As Integer = CType(Obj, Integer)
' No provoca um erro run-time

J a operao DirectCast neste exemplo funcionar:


Dim Obj As Object = 1
Dim Int As Integer = DirectCast(Obj, Integer) ' Sucesso
Dim Int As Integer = CType(Obj, Integer)
' Sucesso, porm mais lento do que DirectCast.

Observe que CType inclui todas as funes de converso do VB. Elas so CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng,
CObj, CShort, CSng e CStr.

Ramificao
Em geral, quando voc quer que o programa realize uma ao, a linha que ele deve executar em seguida depende de algum
fator. Voc quer que o programa "se ramifique" de uma forma em um caso e de forma diferente em outro caso. O Visual
Basic tem duas estruturas de ramificao para permitir isso: as instrues If e Select Case. No abordaremos aqui a instruo
Switch, pois mais complicada e voc pode obter os mesmos resultados usando a instruo If.

Esquilo: Se existir nozes l em cima, v por aquele galho, caso contrrio, v por este.

A instruo If fcil de entender. Voc verifica algo para saber se verdadeiro e, se o computador descobrir que
verdadeiro, ele executar o cdigo daquele bloco. Caso contrrio, passa ao bloco seguinte e refaz o teste. Ele prossegue at
encontrar algo verdadeiro ou alcanar o final de toda a instruo If.
If UserAnswer = "Bald Eagle" Then
Console.WriteLine("Yup, you got it right !")
Else If UserAnswer = "Eagle" Then
Console.WriteLine("Almost the answer is Bald Eagle ")
End If

Em geral, voc vai querer ter tambm um bloco final "else" ento, se nenhum dos blocos acima for verdadeiro, o cdigo
no bloco "else" ser executado.

If UserAnswer = "Bald Eagle" Then


Console.WriteLine("Yup, you got it right !")
Else If UserAnswer = "Eagle" Then
Console.WriteLine("Almost the answer is Bald Eagle ")
Else
Console.WriteLine("Sorry, you got it wrong. Try again.")
End If

Looping
E se voc precisar repetir vrias e vrias vezes uma ao? Por exemplo, escrever os nmeros de 1 a 10. Seria uma tolice fazer
isso da seguinte forma:
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number
Console.WriteLine("Number

"
"
"
"
"
"
"
"
"
"

&
&
&
&
&
&
&
&
&
&

1)
2)
3)
4)
5)
6)
7)
8)
9)
10)

E seria uma tolice MUITO MAIOR escrever assim os nmeros de 1 a 15.000!


onde entram os loops. possvel realizar aes repetidamente com muito pouco cdigo. O Visual Basic tem alguns tipos
de loops, mas vamos abordar apenas dois.

O Loop For
Os loops For so geralmente usados em uma contagem. Voc pode pensar em um loop FOR da seguinte maneira:

comece com um contador definido com um valor (por exemplo, 1);


prossiga at que o contador chegue a um valor especfico (por exemplo, 10);
a cada passagem, faa algo especfico com o contador (por exemplo, adicione 1 ao contador).

O trecho de cdigo a seguir apenas 3 linhas escreve exatamente o mesmo que as 10 linhas de cdigo acima.
For x As Integer = 1 To 10
Console.WriteLine( "Number " & x )
Next

Por padro, o valor de x (ndice do loop) incrementado em 1 entre as iteraes do loop. Esse incremento pode ser definido
com qualquer valor numrico, com a adio de uma clusula Step sintaxe do loop For.
For x As Integer = 1 To 10 Step 2
Console.WriteLine( "Number " & x )
Next

Rapaz: Continue girando Joe. Eu irei contar bem alto.


Pare quando voc ouvir que eu cheguei no 10.

Tambm possvel fazer com que os loops For faam contagem regressiva. Para isso, basta especificar Step com um valor
negativo.
For x As Integer = 10 To 1 Step -1
Console.WriteLine( "Number " & x )
Next

Isso significa "comeando com x igual a 10 e, enquanto x for maior ou igual a 1, subtrair 1 de x".

O Loop While
Pense em um loop WHILE da seguinte maneira: "enquanto algo for verdade, continue a executar repetidamente este bloco
de cdigo".

Garoto: Hey Joe, enquanto o chefe no estiver olhando... Continue girando..

Os loops While podem ser usados para obter exatamente o mesmo efeito do exemplo de loop For acima, mas eis aqui um
exemplo que no tem nada a ver com contagem. Este cdigo pede repetidamente ao usurio para digitar a palavra
"smokey" usando o teclado. S quando o usurio digita corretamente, o computador sai do loop e diz "Thank You". Observe
que a condio verificada a cada passagem "s <> smokey", ou seja, enquanto a palavra digitada no igual a "smokey".
Dim s As String = ""
While s <> "smokey"
Console.WriteLine("Please type the word 'smokey' : ")
s = Console.ReadLine()
End While
Console.WriteLine("Thank You")

Eis aqui um exemplo que utiliza um loop While para fazer exatamente o mesmo do exemplo de loop For mostrado mais
acima. Ns simplesmente introduzimos uma varivel (x, neste caso) a ser usada como contador.
Dim x As Integer = 1
While x < 11
Console.WriteLine( "Number " & x )
x = x + 1
End While

Voc pode ver que x comea como 1, mas tem 1 adicionado a cada passagem do loop. A cada passagem, o computador
verifica novamente se "x ainda menor que 11". Em algum momento, x torna-se igual a 11 e o computador sai do loop.
Loops Interminveis
Quer experimentar uma verdadeira tolice? Deixe de fora a linha x = x + 1. Assim, x NUNCA se tornar maior e ser SEMPRE
menor do que 11. O loop se repetir ETERNAMENTE ou, pelo menos, at que a memria do computador seja insuficiente,
gerando uma mensagem de erro. Sempre que voc escrever um loop interminvel, isso o deixar embaraado.

Rapaz: Hey Joe! No nos deixe aqui para sempre!

A Estrutura de um Programa Completo


Introduo

Nos captulos anteriores, analisamos conceitos especficos e como explicar cada uma dessas idias ao computador. Mas no
levamos em conta como deve ser um "programa completo". Como fazemos para iniciar o programa e quais as partes que
ele precisa conter para funcionar.
Ento, neste captulo vamos abordar a estrutura bsica necessria a um programa em Visual Basic. A idia no causar
confuso expondo todos os detalhes, mas sim compreender a estrutura bsica de um programa seu "esqueleto".
Existem Vrios Tipos Diferentes de Programas em Visual Basic
Se voc fosse acampar nas montanhas no fim de semana, usaria uma estrutura como uma barraca e no uma casa, que
precisa de uma fundao de tijolos. Voc usa uma estrutura adequada ao ambiente onde se encontra. Barracas e casas tm a
mesma finalidade bsica, mas as barracas so especificamente estruturadas para acampamentos.

Fazendo uma analogia, o Visual Basic e o .NET Framework podem ser usados para criar aplicativos para ambientes
diferentes. A linguagem a mesma nos dois casos, mas h algumas diferenas especficas na forma como voc estrutura o
programa, dependendo do ambiente no qual est trabalhando. Eis aqui alguns exemplos de diferentes tipos de programas
em Visual Basic.

Aplicativos do Windows Forms


Bibliotecas de classes
Servios do Windows
Aplicativos de console
Aplicativos Web ASP.NET

Este livro se concentra somente em dois desses tipos de programas os aplicativos de console e os aplicativos do Windows
Forms. Mas o conhecimento obtido nesses dois ambientes tambm ter uma utilidade direta nos outros tipos de aplicativos.
A Estrutura dos Aplicativos de Console
Um aplicativo de console pode exibir e ler somente texto nenhuma imagem, grfico etc. Se voc j abriu um "prompt de
comando" e digitou um comando como DIR para ver uma lista de arquivos, ento j utilizou um aplicativo de console.
Quando quiser experimentar algo com rapidez, ou ento quiser escrever um programa que no precise de nada alm de
texto, geralmente voc utilizar um aplicativo de console, pois o tipo mais simples de programa que se pode escrever com
o Visual Basic.
Eis aqui um exemplo de aplicativo de console simples, mas completo:
1. Imports System
2.
3. Class PleaseSayYo
4.
Shared Sub Main()
5.
Console.WriteLine("Yo!")
6.
Console.ReadLine()
7.
End Sub

8. End Class

E isto o que voc ver na tela ao execut-lo. Ele simplesmente escreve uma linha de texto na tela:

O programa bem curto, no? Mas vamos dividi-lo e discutir sua estrutura.

A linha 1 avisa ao computador que algo mais adiante em nosso programa utilizar uma classe do namespace
chamado "System". A classe especfica cujo cdigo utilizaremos "Console". uma classe escrita pela Microsoft, que
produz todos os tipos de elementos necessrios aos aplicativos de console. Em vez de escrevermos vrias linhas de
cdigo para fazer algo simples, como escrever uma palavra na tela, apenas chamamos o mtodo "WriteLine" da
classe System.Console.
Nas linhas 3 a 8, ns "definimos a classe". Na classe, escrevemos nosso programa, escrevendo propriedades e
mtodos. Essa classe especfica no tem propriedades (pois no precisa de nenhuma), mas tem um mtodo.
Nas linhas 4 a 7, ns definimos um mtodo. Esse mtodo muito parecido com aqueles que discutimos
anteriormente neste livro, mas tem uma caracterstica especial: PRECISA ser chamado de "Main". No temos
permisso para escolher um nome. Quando solicitado que o computador execute um programa em Visual Basic, ele
precisa saber por onde comear. Ele aprendeu que, nos programas em Visual Basic, o programador sempre escreve
um mtodo chamado "Main", e por ele que deve comear. o ponto de entrada. Voc tem permisso para colocar
esse mtodo onde quiser na sua classe na parte superior, inferior ou em qualquer outra parte. O computador vai
encontr-lo, desde que voc o chame de "Main".
Na linha 5, chamamos o mtodo "WriteLine", da classe System.Console, que escreve o texto que especificarmos.

Logicamente, os aplicativos de console podem fazer muito mais do que mostramos aqui e, normalmente, tero muito mais
cdigo, mas eles geralmente comeam com uma estrutura bsica semelhante aos dois exemplos mostrados acima.
Mtodos Compartilhados
A nica palavra estranha que voc viu no programa acima foi "Shared". Para explic-la, vamos primeiro escrever um
exemplo ligeiramente mais complexo de aplicativo de console. Leia atentamente o mtodo "Main". Voc compreende o que
ele faz?
1. Imports System
2.
3. Class SimpleConsoleApp
4.
Public Sub MySimpleMethod()
5.
Console.WriteLine("Yo!")
6.
End Sub
7.
8.
Shared Sub Main()
9.
Dim s As SimpleConsoleApp
10.
s = New SimpleConsoleApp()
11.
s.MySimpleMethod()
12.
End Sub

13. End Class

Esse exemplo realmente mostra a abordagem orientada a objeto melhor do que o exemplo anterior. Em vez de apenas
escrever nosso cdigo diretamente no mtodo"Main", nas linhas 9 e 10 ns declaramos e construmos um objeto uma
instncia dessa classe. Ento, na linha 11, chamamos um mtodo desse objet o.
Voc perceber que o mtodo "MySimpleMethod" no tem a palavra "Shared" na frente; j o mtodo "Main" tem. Eis o
porqu:

A palavra "Shared" acrescentada ao incio de uma definio de mtodo se o mtodo no se destina operao de
um objeto especfico.
E como o mtodo "Main" o "ponto de entrada", ele chamado antes que qualquer objeto seja construdo, ento,
precisa ser definido como "Shared".

Eis aqui mais um exemplo para ilustrar o conceito de "Shared". Preste ateno, especialmente, no texto em itlico.
Imports System
Class SchoolTest
Public testName As String
Public total As Decimal
Public myScore As Decimal
' Um mtodo construtor para esta classe
Public Sub New(ByVal tn As String, ByVal s As Integer, ByVal tot As Integer)
Me.testName = tn
Me.myScore = s
Me.total = tot
End Sub
' Um mtodo COMPARTILHADO para calcular a porcentagem de dois nmeros QUAISQUER
Public Shared Function CalculateAnyPercentage(ByVal numerator As Decimal, _
ByVal denominator As Decimal) As Decimal
Dim percentage As Decimal = (numerator / denominator) * 100
Return percentage
End Function
' Um mtodo de INSTNCIA para calcular a porcentagem de uma instncia de TesteEscolar
Public Function CalculateThisPercentage() As Decimal
Dim percentage As Decimal = (Me.myScore / Me.total) * 100
Return percentage
End Function
Shared Sub Main()
' Usa o mtodo Compartilhado para calcular a porcentagem sem quaisquer instncias
Console.WriteLine("123/200 = " + SchoolTest.CalculateAnyPercentage(123, 200))
' Cria uma nova instncia de TesteEscolar, passando as notas
Dim t As SchoolTest = New SchoolTest("Geography", 12, 60)
' Usa o mtodo de instncia para calcular a porcentagem desta instncia
Console.WriteLine("Percentage for test = " + t.CalculateThisPercentage())
' Espera at que ENTER seja pressionado
Console.ReadLine()
End Sub
End Class

importante observar que temos dois mtodos muito semelhantes os dois calculam porcentagens mas sua utilizao
bem diferente. O mtodo que contm a palavra "Shared" pode ser usado sem a necessidade de declarar uma instnc ia de
New SchoolTest(), enquanto o outro funciona SOMENTE em uma instncia. No exemplo acima, nossa instncia chamada de
"t".
Ento, como se os mtodos Shared dissessem: "Estou acima de tudo isso, funciono onde quero!", enquanto os mtodos
de instncia diriam: "S posso existir quando um objeto real surgir e ento s funcionarei dentro desse objeto".

A Estrutura dos Aplicativos do Windows Forms


Quando voc j conhece a estrutura geral de um aplicativo de console, fcil passar gradualmente para tipos de programas
mais complexos, pois a estrutura bsica permanece a mesma. Este um aplicativo simples do Windows Forms.
Imports System.Windows.Forms
Class SimpleWindowsApp
Inherits Form
' Mtodo construtor
Public Sub New()
Me.Text = "A really Simple Form"
End Sub
' Ponto de entrada para o programa
Shared Sub Main()
Application.Run(New SimpleWindowsApp())
End Sub
End Class

Os dois elementos "novos" so:


1.

A parte "Inherits Form"


Quer dizer que "a minha classe vai herdar tudo da classe Form". Esse um segredo importante, abordado no
captulo chamado "Herana". A Microsoft escreveu um grande conjunto de classes que sabem como criar botes,
menus, caixas de imagens, caixas de seleo e todos os outros tipos de elementos a serem colocados em
aplicativos. Simplesmente adicionando "Inherits Form", a sua classe pode ter acesso imediato a todos esses
elementos.

2.

A parte "Application.Run". Esse o modo padro de iniciar um aplicativo do Windows Forms. um mtodo que
"executa" o seu aplicativo de formulrios. Voc transmite para o mtodo uma nova instncia da sua classe.

Usando Bibliotecas de Classes


Uma biblioteca, no mundo real, um local que contm uma grande quantidade de livros e outras fontes de informaes.
Quando as pessoas precisam saber alguma coisa, no precisam descobrir tudo sobre o assunto novamente e escrever seus
prprios livros. Basta consultar os livros adequados, poupando muito tempo e esforo.

Professora: Tpicos do Projeto: 1. Minha banda favorita / 2. O melhor filme de todos os tempos / 3. Camelos
Aluno: Mas eu no sei nada sobre camelos

Professora: Ento vai para a biblioteca e procure

Da mesma forma, pessoas de todo o mundo escreveram vastas bibliotecas de cdigo em Visual Basic. Ento, em vez de
escrevermos tudo por ns mesmos, geralmente faz sentido utilizar as bibliotecas de outras pessoas em partes dos nossos
programas.
Ainda assim, ser necessrio algum esforo, pois ser preciso pesquisar o que h na biblioteca e entender quais so as
partes teis para voc. Mas isso permitir que voc se concentre mais em fazer o que o seu programa precisa, em vez de
perder muito tempo escrevendo o cdigo de plano de fundo.
De longe, a biblioteca mais importante para o Visual Basic a "biblioteca de classes .NET Framework" da Microsoft. No se
pode escrever um programa realmente til sem usar algum elemento dela. A parte III deste livro dedicada a essa
biblioteca. Quando voc instala o .NET Framework no seu computador, a biblioteca carregada automaticamente e fica
disponvel para seus programas. Voc precisa apenas saber como fazer referncia a ela, ou seja, como us-la a partir dos
seus programas.
Um Exemplo
A parte "System.Drawing" da biblioteca de classes .NET Framework contm muitas classes teis p ara trabalhar com
imagens. Vamos utiliz-la para ilustrar como usar o cdigo de outras pessoas no seu programa.
A classe System.Drawing.Image tem um mtodo chamado RotateFlip, que gira ou inverte qualquer imagem que voc
transmitir a ele. Suponha que voc quer usar esse mtodo no seu programa voc quer carregar um arquivo de imagem
do disco, invert-lo horizontalmente e salvar uma cpia da imagem invertida no disco. Eis uma forma de fazer isso. um
programa completo e funcional (se voc est experimentando, observe que o programa 9 na coleo de arquivos de
exemplo fornecidos com este livro semelhante).
Class PhotoSizer
Public Sub New()
' Abre uma imagem do disco para a memria do computador
Dim img As System.Drawing.Image
img = New System.Drawing.Bitmap("D:\samples\myDog.jpg")
' Inverte a imagem horizontalmente
img.RotateFlip(System.Drawing.RotateFlipType.RotateNoneFlipX)
' Salva a imagem invertida para um arquivo diferente no disco
img.Save("D:\samples\myDogFlipped.jpg")
End Sub
Shared Sub Main()
Dim p As PhotoSizer = New PhotoSizer()
End Sub
End Class

O que fizemos no exemplo acima foi usar uma classe da biblioteca. A classe chamada Image e est na seo da bibl ioteca
chamada System.Drawing.
Depois de criar um objeto de imagem, chamamos dois mtodos da classe Image. Os nomes dos mtodos so RotateFlip e
Save.
Um Modo Mais Fcil
Mas, como voc pode ver, sempre que preciso falar sobre algo no espao de System.Drawing, preciso escrever
novamente todas as palavras. H uma forma de evitar esse desperdcio de energia. Voc pode simplesmente dizer ao
programa uma vez, na parte superior, que vai usar alguns elementos do namespace System.Drawing, e tambm alguns do
namespace System.Drawing.Imaging, usando especificamente a palavra-chave "Imports".
Imports System.Drawing
Imports System.Drawing.Imaging

Class PhotoSizer
Public Sub New()
' Abre uma imagem do disco para a memria do computador
Dim img As Image = New Bitmap("D:\samples\myDog.jpg")
' Inverte a imagem horizontalmente
img.RotateFlip(RotateFlipType.RotateNoneFlipX)
' Salva a imagem invertida para um arquivo diferente no disco
img.Save("D:\samples\myDogFlipped.jpg")
End Sub
Shared Sub Main()
Dim p As PhotoSizer = New PhotoSizer()
End Sub
End Class

Uma Observao Sobre Referncias no Visual Basic Express


Ao criar um projeto no Visual Basic Express, tambm preciso criar um elemento chamado "referncia", apontando para o
arquivo da biblioteca de classes que contm o cdigo da biblioteca que voc deseja utilizar (esses arquivos tm uma
extenso ".dll", que significa "Dynamic Link Library", ou seja, biblioteca de vnculo dinmico). Felizmente, as referncias mais
comuns costumam ser acrescentadas para voc de forma automtica.
A figura a seguir, por exemplo, mostra as referncias adicionadas quando voc cria um projeto de "aplicativo do Windows".
O Visual Basic Express deduz quais as partes da biblioteca que voc poderia usar em um aplicativo assim.

No exemplo acima, voc pode ver que as classes do namespace System.Drawing so mantidas em um arquivo chamado
System.Drawing.dll.
Se a referncia parte da biblioteca que voc deseja usar no tiver sido criada automaticamente, voc mesmo precisar
adicion-la. Imagine, por exemplo, que voc encontra um exemplo de cdigo que usa a classe System.Web.HttpRequest

para recuperar algumas informaes em um servidor Web e quer experiment-lo. Voc clica com o boto direito em
"References" (Referncias), seleciona "Add Reference" (Adicionar Referncia) e seleciona a parte System.Web da biblioteca.
Voc ver, agora, que pode usar as classes no seu cdigo.

Concluso
Ento, muito simples incluir cdigo de uma biblioteca. A parte difcil saber quais classes, mtodos etc. esto disponveis
para uso nessa vasta biblioteca.

Por isso, a parte III deste livro foi escrita para que voc tenha contato com algumas partes teis da biblioteca de classes
.NET Framework da Microsoft.

Parte IV Programando Com o .NET Framework


Ter o Visual Basic sem o .NET Framework praticamente to til quando uma caneta sem tinta. Voc pode escrever tudo o
que desejar, mas no obter nada til.
O que o .NET Framework? uma plataforma de programao desenvolvida pela Microsoft. O Visual Basic foi
especificamente escrito como uma linguagem que usar o .NET Framework. A estrutura feita de dois elementos diferentes:
1.

Uma enorme biblioteca de cdigo que podemos chamar a partir de nossos programas do Visual Basic. Isso nos
poupa de escrever tudo sozinhos.

2.

Um mdulo runtime, que executa os programas para ns quando estamos prontos (isso acontece invisivelmente
voc no precisa se preocupar com isso)

Quando escreve um programa em Visual Basic (ou um programa em qualquer uma das outras linguagens do .NET), voc
normalmente chama algum cdigo residente na biblioteca, alm de escrever alguns dos seus prprios cdigos.

Garoto: Eu no preciso saber tudo mas apenas onde encontrar o que eu preciso

Existem tantas classes no .NET Framework e algumas delas so bem complicadas, ento certamente no tentaremos tratar
de todo o assunto aqui. Em vez disso, os captulos desta seo trataro de algumas das classes do .NET Framework que
imaginamos que voc ir considerar mais teis. medida que voc fica mais experiente, descobrir que existem certas
classes que usa mais freqentemente e voc as conhecer bem como pegar seu livro favorito da biblioteca; com o
tempo, saber exatamente onde encontr-lo.
muito importante entender que a parte III no apenas para ler esses captulos incluem muitos programas de exemplo e
espera-se que voc coloque todos prova e tente alter-los para fazer coisas novas.
Como Testar os Exemplos
Nos captulos a seguir, sempre que voc visualizar um bloco com as palavras "cdigo para programa..., poder executar
esse cdigo usando o Visual Basic Express. Embora a maioria desses programas seja pequena, eles so todos programas que
realmente funcionam. So estas as etapas que voc normalmente seguir:

Abra o Visual Basic Express. Selecione Arquivo -> Abrir Projeto e v at onde salvou os programas de exemplo. Abra
qualquer arquivo com uma extenso ".vbproj" (ou voc pode usar o Windows Explorer para encontrar o exemplo
que deseja e simplesmente clicar duas vezes no arquivo .vbproj).

Pressione F5 para executar o programa (ou clique na seta verde).

Como Alterar e Estender os Exemplos


No h problemas em dizer que "voc pode alterar os exemplos", mas como saber de que forma voc pode alter-los? Os
exemplos mostram alguns mtodos e classes do .NET Framework em uso como saber que outros esto disponveis? H
algumas formas de descobrir:

Examine a biblioteca de classes do SDK do .NET Framework includa na ajuda do Visual Basic Express.
Ao programar no Visual Basic Express, para ver as classes, mtodos, campos etc. disponveis para uma classe,
pressione a tecla "." diretamente aps digitar um namespace ou um nome de classe. Por exemplo, digite "Console. " e
voc ver uma lista de mtodos e outros membros disponveis na classe Console.

No caso de um mtodo, se voc digitar um parnteses aberto no final do nome do mtodo, tambm poder ver os tipos de
parmetro que o mtodo espera. Muitas vezes, um mtodo escrito de uma maneira especial para permitir diferentes
conjuntos de parmetros ento, voc pode percorr-los pressionando as teclas de seta para baixo e para cima. O exemplo
a seguir mostra o que acontece quando voc digita "Console.WriteLine(". O Visual Basic Express mostra que existem 18
maneiras diferentes para se chamar WriteLine. Na figura abaixo, pressionamos a seta para baixo at atingirmos a 14.

Garoto: Legal aqui onde ns conseguimos escrever programas de verdade!

System.Console
Introduo
A idia de um Console vem da poca em que grandes computadores de mainframe eram muito populares. Uma empresa
teria um computador gigante escondido em um quartinho nos fundos e as pessoas do lado de fora teriam um teclado e
uma tela simples, chamada de console, presa fera do quarto dos fundos. Essas telas no eram capazes de exibir grficos

verdadeiros apenas texto. O teclado era o dispositivo de entrada, enviando informaes ao computador e o console era o
dispositivo de sada principal, permitindo ao computador enviar informaes de volta ao usurio.

O mundo progrediu e hoje em dia a maioria dos computadores usa telas que podem mostrar muito mais representaes
naturais s pessoas do que linhas de texto fotografias, por exemplo.
Existe geralmente uma necessidade, no entanto, de fazer coisas que no precisam mostrar nada especial ao usurio. Voc
pode, por exemplo, ter um programa que colete alguns dados de um servidor de Internet de algum lugar e os coloque em
um arquivo ou no seu PC. Se tudo o que voc precisa que ele faa ocupado buscando dados e, em seguida, concludo,
por que perder muito mais tempo e memria em uma interface de usurio sofisticada? por essa razo que a biblioteca do
.NET nos oferece uma classe para escrever facilmente aplicativos de console.
No ridicularize aplicativos de console, como se eles no fossem legais. Na verdade, voc descobrir que os
programadores realmente inteligentes se cansam de perder tempo com interfaces sofisticadas e fazem a maior parte do seu
prprio trabalho em aplicativos de console.
claro que, se voc planeja escrever um programa que outra pessoa ir usar, provavelmente voc desejar ser um pouco
mais gentil e oferecer a ela algo mais amigvel do que uma interface de console.
Alguns mtodos teis
1.
2.
3.
4.

Console.ReadLine l uma linha de texto do teclado (ou algum outro dispositivo de entrada)
Console.Read l um nmero do teclado (ou algum outro dispositivo de entrada)
Console.WriteLine escreve texto na tela (ou outro dispositivo de sada), comeando em uma nova linha
Console.Write escreve alguns caracteres na tela sem comear uma nova linha

Programa de Exemplo 1
O seguinte programa simplesmente escreve a palavra "Yo!" na tela e aguarda at que a tecla ENTER seja pressionada.

Cdigo para o programa 1


Imports System
Class PleaseSayYo
Shared Sub Main()
' Escreve uma palavra na tela
Console.Write("Yo!")
' Espera at que Enter seja pressionado
Console.ReadLine()
End Sub
End Class

Programa de Exemplo 2
O programa a seguir

Pede ao usurio para digitar uma palavra no teclado


Pergunta ao usurio quantas vezes a palavra deve ser escrita
Escreve, em uma nova linha de cada vez, a palavra digitada, quantas vezes tiver sido solicitado

Cdigo para o programa 2


Imports System
Class WriteAFewLines
Shared Sub Main()
Console.WriteLine("Type in your favourite word : ")
' Armazena, em uma varivel string, a palavra que o usurio digitar
Dim favouriteWord As String = Console.ReadLine()
Console.WriteLine("How many times shall I write it? ")
' Armazena, em uma varivel inteira, o nmero que ele digitar
' (Ele receber um erro caso ele no digitar um nmero de verdade)
Dim numberOfTimes As Integer = Convert.ToInt32(Console.ReadLine())
' Escreve a palavra na tela de acordo com o total de vezes que ele pediu
For i As Integer = 0 To numberOfTimes - 1
Console.WriteLine(favouriteWord)
Next
' Espera at que ENTER seja pressionado
Console.ReadLine()
End Sub
End Class

Computador: Escreva sua palavra favorita :


Voc: frias
Computador: Quantas vezes voc deseja que eu a escreva ?
Voc: 3
Computador: frias / frias / frias

System.Windows.Forms
Introduo
Se voc deseja escrever programas que paream com os que voc est acostumado a usar em um ambiente do Windows,
voc sem dvida usaria as classes no namespace System.Windows.Forms. Eles permitem que voc trabalhe com botes,
caixas de listagem, caixas de texto, menus, caixas de mensagens e muitos outros controles. Os controles so coisas que
voc coloca em um formulrio eles mostram coisas como texto (um controle Label) e imagens (um controle Picture Box) ou
permitem que voc execute aes como selecionar um valor ou clicar em um boto para passar a outro formulrio. Voc
provavelmente usar as classes abaixo de System.Windows.Forms na maioria dos seus programas em Visual Basic.
Obviamente que a idia de um formulrio vem dos formulrios de papel amplamente usados no mundo real. Um
formulrio algo que permite a colocao de vrias coisas (texto, imagens, caixas de entrada etc.) em um layout bem
organizado. Geralmente, uma pessoa ir ler algumas informaes no formulrio e preencher algumas informaes em certas
regies.

Bibliotecria: Esqueceu seu carto de bibioteca? Sem problemas simplesmente preencha este formulrio

A idia no computador semelhante um formulrio permite a colocao de texto, imagens, caixas de entrada, botes etc.,
possibilitando que eles sejam precisamente organizados na tela muito diferente de um aplicativo de console, que pode
apenas tratar de linhas de texto uma aps a outra.

A Microsoft forneceu, na biblioteca de classe do .NET Framework, um nmero enorme de controles para o uso em
formulrios. Depois que voc aprende como colocar um controle em um formulrio, pode criar um aplicativo sofisticado
muito rapidamente, simplesmente usando esses controles existentes.
Algumas Classes teis no Namespace System.Windows.Forms
Veja a seguir exemplos de classes com cdigo para controles que voc pode colocar nos seus formulrios

Label
Button
ListBox
CheckBox
RadioButton
ListBox
Menu
TabControl
Toolbar
TreeView
DataGrid
PictureBox
RichTextBox

Uma Observao Sobre Como Trabalhar Com os Exemplos do Windows Forms Usando o Visual Basic Express
Para brincar com os seguintes exemplos no Visual Basic Express, voc pode selecionar Arquivo -> Abrir Projeto e abrir os
programas de exemplo .vbproj do livro a partir de onde desejar salv-los no disco do seu computador.
Se, no entanto, voc desejar digit-los a partir do zero sozinho, precisar estar ciente de que quando cria um novo projeto de
"Aplicativo do Windows", o Visual Basic Express anota alguns arquivos .vb para voc (chamados Form1.vb e Program.vb) e
insere alguns cdigos do Visual Basic para que voc fique preparado para comear. Ele, na verdade, cria para voc um
programa bsico, mas totalmente funcional. Enquanto estiver trabalhando com os exemplos abaixo, para manter as coisas
simples, voc dever provavelmente:

excluir o Form1.vb e
substituir o cdigo em Program.vb pelo cdigo do exemplo com o qual est trabalhando

Isso no necessrio se voc mais exatamente abrir os exemplos usando Arquivo -> Abrir Projeto.
Programa de Exemplo 3
Este um aplicativo de formulrios do Windows absolutamente simples. Tudo o que ele faz comear um novo formulrio e
escrever algum texto na barra de ttulos da janela.

Cdigo para o programa 3


Imports System.Windows.Forms
Class SimpleWindowsForm
Inherits Form
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o ttulo da janela
Me.Text = "A really Simple Form"
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima

Application.Run(New SimpleWindowsForm())
End Sub
End Class

Programa de Exemplo 4
Este exemplo tambm simples, mas nos leva para o prximo nvel colocando um boto no formulrio

Cdigo para o programa 4


Imports System.Windows.Forms
Class SimpleWindowsFormWithButton
Inherits Form
Private button1 As Button
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o ttulo da janela
Me.Text = "A simple form with a button"
' Adiciona um boto para a coleo de controles do formulrio
' Apesar do boto dizer "clique em mim", nada acontecer se voc o clicar!
button1 = New Button()
button1.Text = "Click me"
Me.Controls.Add(button1)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New SimpleWindowsFormWithButton())
End Sub
End Class

Programa de Exemplo 5

Ter um boto no formulrio bom, mas no exemplo acima nada acontece quando o usurio clica no boto. Chato.
Precisamos escrever um mtodo que far algo quando o boto for clicado vamos apenas fazer com que ele altere a barra
de ttulo, neste caso. Chamamos tal mtodo de um manipulador de eventos, uma vez que ele ir esperar um evento (um
clique, neste caso) e ento decidir como tratar dele. Tambm precisamos vincular o evento de clique do boto ao
manipulador de eventos.

Cdigo para o programa 5


Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class FormWithWorkingButton
Inherits Form
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o ttulo da janela
Me.Text = "Simple form with working button"
' Adiciona um boto e anexa um mtodo manipulador de evento ele
Dim button1 As Button = New Button()
button1.Text = "Click me"
AddHandler button1.Click, AddressOf Button1_Click
Me.Controls.Add(button1)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New FormWithWorkingButton())
End Sub
' Um manipulador de evento que executado quando o boto clicado
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
' Muda o ttulo da janela
Me.Text = "Button was clicked"
End Sub
End Class

Programa de Exemplo 6
Certo, o programa faz todas as coisas bsicas. Agora vamos adicionar alguns outros tipos de controles ao formulrio, explos de uma forma legal e trabalhar um pouco com eles. Usaremos 4 tipos de controles: Button, ListBox, MessageBox e
PictureBox.
Observe que, alm do System.Windows.Forms, tambm usaremos o namespace System.Drawing aqui. Isso necessrio
porque estamos usando um PictureBox e trabalhar com imagens requer as classes Drawing.

Cdigo para o programa 6


Imports System.Windows.Forms
Imports System.Drawing
Class MyForm
Inherits Form
' Declara uma caixa de listagem fora dos mtodos, uma vez que ns queremos conversar com ela
' a partir de um ou mais mtodos
Private listBox1 As ListBox
' O mtodo construtor para nossa classe
Public Sub New()
' Cria uma caixa de imagem, coloca uma imagem dentro dela e adiciona a mesma para este
formulrio
Dim pictureBox1 As PictureBox = New PictureBox()
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Dim image1 As Bitmap = New Bitmap("../../images/seashore.jpg")
pictureBox1.ClientSize = New Size(Me.Width, 100)
pictureBox1.Image = DirectCast(image1, Image)
Me.Controls.Add(pictureBox1)
' Cria um boto,
' configura algumas de suas propriedades e adiciona o mesmo para o formulrio
Dim button1 As Button = New System.Windows.Forms.Button()
button1.Location = New System.Drawing.Point(10, 120)
button1.Text = "Click me"
AddHandler button1.Click, AddressOf button1_Click
Me.Controls.Add(button1)
' Cria uma caixa de listagem,
' configura algumas de suas propriedades e adiciona a mesma para o formulrio
listBox1 = New System.Windows.Forms.ListBox()
listBox1.Location = New System.Drawing.Point(10, 160)
listBox1.Items.Add("Sparkly")
listBox1.Items.Add("Dull")
listBox1.Items.Add("Vivacious")
listBox1.Items.Add("Plain")
listBox1.Items.Add("Outstanding")
listBox1.SelectedIndex = 3
Me.Controls.Add(listBox1)
End Sub
' Um mtodo manipulador de evento que ser executado quando o boto for clicado
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' Mostra uma mensagem indicando qual item na caixa de listagem est selecionado
MessageBox.Show(Me, "You have selected " & listBox1.SelectedItem.ToString(), _
"Notification", MessageBoxButtons.OK)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New MyForm())
End Sub
End Class

Programa de Exemplo 7
Tudo bem, agora vamos explorar o inexplorado. Para ilustrar como usar alguns dos outros controles, escreveremos um
programa realmente grande incluindo vrios controles teis. Isso tornar o cdigo assustadoramente longo, mas ser um
programa til para voc consultar quando precisar usar um determinado controle.
Voc no precisa ler o programa inteiro em detalhes, mas quando tiver interesse em usar, por exemplo, um CheckBox,
volte a este programa, encontre as partes que falam de CheckBox e estude essas partes.
Observe que para usar PictureBox e DataGridView de maneiras interessantes, tambm usaremos os namespaces
System.Drawing, System.Data e System.Xml.

Cdigo para o programa 7


Imports
Imports
Imports
Imports
Imports

System
System.Windows.Forms
System.Drawing
System.Data
System.Xml

Class FormWithManyControls
Inherits Form
Private
Private
Private
Private
Private

treeView1 As TreeView
panel1 As Panel
checkBox1 As CheckBox, checkBox2 As CheckBox
radiobutton1 As RadioButton, radioButton2 As RadioButton
listBox1 As ListBox

' O mtodo construtor para nossa classe


Public Sub New()
' Configura o ttulo da janela e tamanho
Me.Text = "A form dealing with many types of controls"
Me.Width = 700
Me.Height = 500
' Adiciona um visualizador em rvore como uma espcie de menu
treeView1 = New TreeView()
treeView1.BackColor = Color.BurlyWood
treeView1.Dock = DockStyle.Left
AddHandler treeView1.AfterSelect, AddressOf treeView1_AfterSelect
Dim tn As TreeNode = New TreeNode("Controls")
tn.Expand()

tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New
tn.Nodes.Add(New

TreeNode("[Wipe clean]"))
TreeNode("Label"))
TreeNode("Button"))
TreeNode("CheckBox"))
TreeNode("RadioButton"))
TreeNode("ListBox"))
TreeNode("TextBox"))
TreeNode("TabControl"))
TreeNode("DataGridView"))
TreeNode("MainMenu"))
TreeNode("ToolBar"))
TreeNode("PictureBox"))
TreeNode("RichTextBox"))

treeView1.Nodes.Add(tn)
Me.Controls.Add(treeView1)
' Adiciona um painel para colocar todos os outros controles dentro dele
panel1 = New Panel()
panel1.Dock = DockStyle.Right
panel1.BorderStyle = BorderStyle.Fixed3D
panel1.Width = Me.Width - treeView1.Width
Me.Controls.Add(panel1)
End Sub
' Um manipulador de evento que executado quando algo na rvore selecionado
Private Sub treeView1_AfterSelect(ByVal sender As Object, _
ByVal e As System.Windows.Forms.TreeViewEventArgs)
' Faz algo apropriado para qualquer n que for clicado
If e.Node.Text = "[Wipe clean]" Then
' Deixa o painel limpo de quaisquer controles
panel1.Controls.Clear()
ElseIf e.Node.Text = "Button" Then
' Adiciona um boto para o painel
Dim button1 As Button = New Button()
button1.Text = "I'm a button"
button1.Location = New Point(150, 80)
AddHandler button1.Click, AddressOf button1_Click
panel1.Controls.Add(button1)
ElseIf e.Node.Text = "Label" Then
' Adiciona um rtulo para o painel
Dim label1 As Label = New Label()
label1.Text = "This is a label. Labels are simply used to write text at a point on the
screen"
label1.Location = New Point(150, 10)
label1.Width = 400
AddHandler label1.Click, AddressOf label1_Click
panel1.Controls.Add(label1)
ElseIf e.Node.Text = "CheckBox" Then
' Adiciona algumas caixas de verificao para o painel
checkBox1 = New CheckBox()
checkBox1.Text = "I am sharp"
checkBox1.Location = New Point(10, 50)
AddHandler checkBox1.CheckedChanged, AddressOf CheckBox_CheckedChanged
panel1.Controls.Add(checkBox1)
checkBox2 = New CheckBox()
checkBox2.Text = "I am modest"
checkBox2.Location = New Point(10, 70)
AddHandler checkBox2.CheckedChanged, AddressOf CheckBox_CheckedChanged

panel1.Controls.Add(checkBox2)
ElseIf e.Node.Text = "RadioButton" Then
' Adiciona alguns botes de rdio para o painel
radiobutton1 = New RadioButton()
radiobutton1.Text = "I am sharp"
radiobutton1.Location = New Point(370, 210)
AddHandler radiobutton1.CheckedChanged, AddressOf RadioButton_CheckedChanged
panel1.Controls.Add(radiobutton1)
radioButton2 = New RadioButton()
radioButton2.Text = "I am dim-witted"
radioButton2.Location = New Point(370, 230)
AddHandler radiobutton1.CheckedChanged, AddressOf RadioButton_CheckedChanged
panel1.Controls.Add(radioButton2)
ElseIf e.Node.Text = "ListBox" Then
' Adiciona uma caixa de listagem para o painel
listBox1 = New ListBox()
listBox1.Items.Add("Green")
listBox1.Items.Add("Beige")
listBox1.Items.Add("White")
listBox1.Location = New Point(200, 180)
AddHandler listBox1.SelectedIndexChanged, AddressOf listBox1_SelectedIndexChanged
panel1.Controls.Add(listBox1)
ElseIf e.Node.Text = "TextBox" Then
' Adiciona uma caixa de texto para o painel
Dim TextBox1 As TextBox = New TextBox()
TextBox1.Text = "You can type here"
TextBox1.Location = New Point(10, 110)
panel1.Controls.Add(TextBox1)
ElseIf e.Node.Text = "DataGridView" Then
' Adiciona uma grade de dados, preenchida com dados de um arquivo xml, para o painel
Dim dataSet1 As DataSet = New DataSet("A sample DataSet")
dataSet1.ReadXml("../../data/grades.xml")
Dim dataGridView1 As DataGridView = New DataGridView()
dataGridView1.Width = Convert.ToInt32((panel1.Width / 2) - 10)
dataGridView1.Height = 150
dataGridView1.Location = New Point(2, panel1.Height - dataGridView1.Height - 5)
dataGridView1.DataSource = dataSet1
dataGridView1.DataMember = "subject"
panel1.Controls.Add(dataGridView1)
ElseIf e.Node.Text = "TabControl" Then
' Adiciona um paginador para o painel
' e adiciona algum contedo para cada pgina
Dim tabControl1 As TabControl = New TabControl()
tabControl1.Location = New Point(10, 150)
tabControl1.Size = New Size(165, 146)
Dim tabPage1 As TabPage = New TabPage("Robynne")
Dim pictureBox1 As PictureBox = New PictureBox()
pictureBox1.Image = New Bitmap("../../images/robynne.jpg")
pictureBox1.Size = New Size(160, 120)
tabPage1.Controls.Add(pictureBox1)
tabControl1.TabPages.Add(tabPage1)
Dim tabPage2 As TabPage = New TabPage("Her Dog")
Dim pictureBox2 As PictureBox = New PictureBox()
pictureBox2.Image = New Bitmap("../../images/chocolate.jpg")
pictureBox2.Size = New Size(160, 120)
tabPage2.Controls.Add(pictureBox2)

tabControl1.TabPages.Add(tabPage2)
Dim tabPage3 As TabPage = New TabPage("Info")
tabPage3.BackColor = Color.White
Dim label1 As Label = New Label()
label1.Text = "Robynne lives in Cape Town, South Africa." _
& Environment.NewLine & Environment.NewLine _
& "She has a dog named Chocolate, from the planet Woof," _
& " rapidly growing into her oversized ears."
label1.Dock = DockStyle.Fill
tabPage3.Controls.Add(label1)
tabControl1.TabPages.Add(tabPage3)
panel1.Controls.Add(tabControl1)
ElseIf e.Node.Text = "PictureBox" Then
' Adiciona uma imagem para o painel
Dim pictureBox1 As PictureBox = New PictureBox()
pictureBox1.Image = New Bitmap("../../images/ocean.jpg")
pictureBox1.BorderStyle = BorderStyle.Fixed3D
pictureBox1.Location = New Point(250, 25)
pictureBox1.Size = New Size(300, 130)
panel1.Controls.Add(pictureBox1)
ElseIf e.Node.Text = "RichTextBox" Then
' Adiciona uma caixa para digitar texto com formatao
' Carrega alguns dados de um arquivo XML para ela
Dim richTextBox1 As RichTextBox = New RichTextBox()
richTextBox1.LoadFile("../../data/grades.xml", RichTextBoxStreamType.PlainText)
richTextBox1.WordWrap = False
richTextBox1.BorderStyle = BorderStyle.Fixed3D
richTextBox1.BackColor = Color.Beige
richTextBox1.Size = New Size(Convert.ToInt32((panel1.Width / 2) - 10), 150)
richTextBox1.Location = New Point(Convert.ToInt32((panel1.Width / 2) + 10),
panel1.Height - richTextBox1.Height - 5)
panel1.Controls.Add(richTextBox1)
ElseIf e.Node.Text = "MainMenu" Then
' Adiciona um "menu" clssico (ele aparece no topo da janela)
Dim mainMenu1 As MainMenu = New MainMenu()
Dim menuItem1 As MenuItem = New MenuItem("File")
menuItem1.MenuItems.Add("Exit", New EventHandler(AddressOf mainMenu1_Exit_Select))
mainMenu1.MenuItems.Add(menuItem1)
Dim menuItem2 As MenuItem = New MenuItem("Background")
menuItem2.MenuItems.Add("Choose", New EventHandler(AddressOf mainMenu1_ColorOwn_Select))
menuItem2.MenuItems.Add("White", New EventHandler(AddressOf mainMenu1_ColorWhite_Select))
mainMenu1.MenuItems.Add(menuItem2)

Me.Menu = mainMenu1
MessageBox.Show("A main menu has been added at the top left of the window. Try it out
after clicking OK.")
ElseIf e.Node.Text = "ToolBar" Then
' Adiciona uma barra de ferramentas (e botes) para o painel
Dim toolBar1 As ToolBar = New ToolBar()
Dim imageList1 As ImageList = New ImageList()
imageList1.Images.Add(New Bitmap("../../images/open.gif"))
imageList1.Images.Add(New Bitmap("../../images/close.gif"))
imageList1.Images.Add(New Bitmap("../../images/undo.gif"))
toolBar1.ImageList = imageList1
Dim toolBarbutton1 As ToolBarButton = New ToolBarButton("Open")
toolBarbutton1.ImageIndex = 0
toolBar1.Buttons.Add(toolBarbutton1)
Dim toolBarbutton2 As ToolBarButton = New ToolBarButton("Close")
toolBarbutton2.ImageIndex = 1
toolBar1.Buttons.Add(toolBarbutton2)
Dim toolBarButton3 As ToolBarButton = New ToolBarButton("Huh")

toolBarButton3.ImageIndex = 3
toolBar1.Buttons.Add(toolBarButton3)
AddHandler toolBar1.ButtonClick, AddressOf toolBar1_Click
panel1.Controls.Add(toolBar1)
End If
End Sub
' Abaixo, todos os manipuladores de eventos para os controles adicionados acima
' Um manipulador de evento que executado quando o rtulo clicado
Private Sub label1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
MessageBox.Show("Yes, labels can be clicked, although it's not normal to do so.")
End Sub
' Um manipulador de evento que executado quando o boto clicado
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
MessageBox.Show("Yup, you were supposed to click me")
End Sub
' Um manipulador de evento que executado quando uma caixa de verificao marcada ou no
Private Sub CheckBox_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
If checkBox1.Checked AndAlso checkBox2.Checked Then
MessageBox.Show("Good for you")
ElseIf checkBox1.Checked Then
MessageBox.Show("It's not good to be sharp without being modest")
ElseIf checkBox2.Checked Then
MessageBox.Show("Modesty is good. Pity you're not sharp too.")
Else
MessageBox.Show("Oh dear, neither sharp nor modest eh?")
End If
End Sub
' Um manipulador de evento que executado quando um boto de rdio clicado
Private Sub RadioButton_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
If radiobutton1.Checked Then
MessageBox.Show("Glad to hear it")
ElseIf radioButton2.Checked Then
MessageBox.Show("What a shame")
End If
End Sub
' Um manipulador de evento que executado quando um item na caixa de listagem selecionado
Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
If listBox1.SelectedItem.ToString() = "Green" Then
treeView1.BackColor = Color.LightSeaGreen
ElseIf listBox1.SelectedItem.ToString() = "Beige" Then
treeView1.BackColor = Color.Beige
ElseIf listBox1.SelectedItem.ToString() = "White" Then
treeView1.BackColor = Color.White
End If
End Sub
' Um manipulador de evento que executado quando "branco" selecionado no menu
Private Sub mainMenu1_ColorWhite_Select(ByVal sender As Object, ByVal e As System.EventArgs)
treeView1.BackColor = Color.White
End Sub
' Um manipulador de evento que executado quando uma cor selecionada no menu
Private Sub mainMenu1_ColorOwn_Select(ByVal sender As Object, ByVal e As System.EventArgs)
Dim colorDialog1 As ColorDialog = New ColorDialog()
colorDialog1.Color = treeView1.BackColor
colorDialog1.ShowDialog()

treeView1.BackColor = colorDialog1.Color
End Sub
' Um manipulador de evento que executado quando o usurio escolhe "sair" no menu
Private Sub mainMenu1_Exit_Select(ByVal sender As Object, ByVal e As System.EventArgs)
If MessageBox.Show("Are you sure you want to exit?", "Exit confirmation", _
MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Me.Dispose()
End If
End Sub
' Um manipulador de evento que executado quando um atalho na barra de ferramentas
selecionado
Private Sub toolBar1_Click(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs)
If e.Button.Text = "Open" Then
MessageBox.Show("This could have opened a file, for example")
ElseIf e.Button.Text = "Close" Then
MessageBox.Show("This could have closed a file, for example")
ElseIf e.Button.Text = "Huh" Then
MessageBox.Show("Huh?")
End If
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New FormWithManyControls())
End Sub
End Class

System.Drawing
Introduo
As classes agrupadas no namespace Drawing permitem que trabalhemos com diferentes tipos de imagens. Nos
computadores, ns normalmente lidamos com dois tipos gerais de imagens:

Grficos de varredura ou bitmap

Grficos vetoriais

Grficos de bitmap so imagens feitas de vrios pontos. Por


exemplo, fotografias e cones podem ser representados bem
como bitmaps.

Grficos vetoriais so imagens feitas de formas especficas


como linhas, crculos, retngulos etc. A planta de uma casa,
por exemplo, pode ser muito bem representada por
grficos vetoriais.

Grficos de Bitmap
Primeiro, mostrarei alguns exemplos de como trabalhar com grficos de bitmap. muitas vezes til trabalhar com imagens
como fotografias no computador, e a biblioteca de classe do .NET Framework inclui muitos cdigos teis para fazer isso.
Programa de Exemplo 8
Este programa simplesmente busca uma imagem de bitmap (um arquivo JPEG, neste caso) a partir do disco e o exibe em um
formulrio.
Para exibir uma imagem em um formulrio, til usar algum controle capaz de exibir imagens. O controle PictureBox
perfeito para essa finalidade.

Cdigo para o programa 8


Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class PictureDisplayer
Inherits Form
Private image1 As Bitmap
Private pictureBox1 As PictureBox
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o ttulo da janela e tamanho
Me.Text = "Picture Displayer"
Me.Size = New Size(302, 240)
' Prepara uma caixa para armazenar a imagem
pictureBox1 = New PictureBox()
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
pictureBox1.BorderStyle = BorderStyle.Fixed3D
pictureBox1.ClientSize = New Size(300, 196)

' Adiciona uma imagem para a caixa


image1 = New Bitmap("../../images/lama.jpg")
pictureBox1.Image = DirectCast(image1, Image)
' Adiciona a caixa (com a imagem) para o formulrio
Me.Controls.Add(pictureBox1)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New PictureDisplayer())
End Sub
End Class

Programa de Exemplo 9
Este prximo programa carrega uma fotografia a partir do disco e tambm permite que o usurio gire-a horizontalmente
clicando no boto "Flip" (Girar).

Cdigo para o programa 9


Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class PictureFlipper
Inherits Form
Private button1 As Button
Private image1 As Bitmap
Private pictureBox1 As PictureBox
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o ttulo da janela e tamanho
Me.Text = "Picture Flipper"
Me.Size = New Size(302, 240)
' Adiciona um boto para o formulrio
button1 = New Button()
button1.Text = "Flip"
button1.Location = New Point(100, 150)
AddHandler button1.Click, AddressOf button1_Click
Me.Controls.Add(button1)
' Adiciona uma caixa de imagem para o formulrio

pictureBox1 = New PictureBox()


pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
pictureBox1.BorderStyle = BorderStyle.Fixed3D
pictureBox1.ClientSize = New Size(300, 196)
' Adiciona uma imagem para a caixa de imagem
image1 = New Bitmap("../../images/elephants.jpg")
pictureBox1.Image = DirectCast(image1, Image)
' Adiciona a caixa de imagem (com a imagem) para o formulrio
Me.Controls.Add(pictureBox1)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New PictureFlipper())
End Sub
' Um manipulador de evento que executado quando o boto clicado
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
' Inverte a imagem ao longo do eixo X (horizontalmente)
image1.RotateFlip(RotateFlipType.RotateNoneFlipX)
' Reinsere a imagem para a caixa de imagem
pictureBox1.Image = DirectCast(image1, Image)
' Atualiza o ttulo da janela
Me.Text = "Picture was flipped"
End Sub
End Class

Grficos de Vetor
Agora, vamos passar para exemplos que tratam de grficos vetoriais imagens feitas de formas especficas.
Em todos esses exemplos, criaremos um boto e um mtodo de manipulador de eventos para detectar o evento de clique
do boto. Apenas depois que o boto for clicado que executaremos o cdigo que funciona com o grfico.
Veja alguns conceitos importantes a entender. Eles so muito lgicos mas se voc no os conhecia, poder ficar um pouco
confuso:
1.

No mundo real, para desenhar uma linha, um crculo, um retngulo etc., voc precisa primeiro selecionar uma
caneta de cor e espessura corretas.
Da mesma forma, para desenhar uma forma simples no computador, voc deve primeiro criar um objeto Pen. Por
exemplo, esse cdigo cria um objeto Pen que desenhar em verde com uma espessura de 3 pixels:

Dim myGreenPen As Pen = New Pen(Color.Green, 3)

2.

Para criar uma forma colorida, voc poderia usar algo como um pincel.
No computador, formas coloridas podem apenas ser criadas se voc tiver criado um objeto Brush com alguma
cor escolhida. Existem diferentes tipos de pincis disponveis; o seguinte trecho de cdigo criar um objeto
SolidBrush azul:
Dim myBlueBrush As SolidBrush = New SolidBrush(Color.Blue)

Programa de Exemplo 10
Neste programa, o mtodo DrawSomeShapes cria uma linha, um retngulo e uma elipse (um crculo achatado).

Cdigo para o programa 10


Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class SimpleShapeMaker
Inherits Form
' O mtodo construtor para nossa classe
Public Sub New()
' Muda a cor de fundo do formulrio para branco
Me.BackColor = Color.White
' Adiciona um boto, com um manipulador de evento anexado, para o formulrio
Dim button1 As Button = New Button()
button1.Text = "click me"
button1.Location = New Point(110, 10)
button1.BackColor = Color.SteelBlue
AddHandler button1.Click, AddressOf button1_Click
Me.Controls.Add(button1)
End Sub
' Um manipulador de evento que executado quando o boto clicado
Private Sub button1_Click(ByVal o As Object, ByVal e As System.EventArgs)
' Executa um mtodo especfico que ns escrevemos
DrawSomeShapes()
End Sub
' Um mtodo que desenha algumas formas na superfcie do formulrio
Private Sub DrawSomeShapes()
' Prepara uma superfcie de desenho para este formulrio
Dim g As Graphics = Me.CreateGraphics()
' Prepara uma caneta que escreve vermelho e de largura 3
Dim redPen As Pen = New Pen(Color.Red, 3)
' Usa a caneta pra desenhar uma linha reta, um retngulo e uma elipse
g.DrawLine(redPen, 140, 170, 140, 230)
g.DrawRectangle(redPen, 50, 60, 50, 60)
g.DrawEllipse(redPen, 150, 100, 100, 60)
' Limpa
g.Dispose()
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New SimpleShapeMaker())
End Sub

End Class

Programa de Exemplo 11
Que tal nos divertirmos um pouco com o mouse agora? Fazer coisas grficas interessantes normalmente mais fcil com um
mouse do que com um teclado. Neste prximo exemplo, trabalhamos com grficos de bitmap e vetoriais, mas tambm
aproveitamos a oportunidade para usar alguns eventos do mouse.
Fazemos algumas coisas novas interessantes abaixo particularmente com bitmaps. Embora no desejemos escrever um
artigo sobre isso, veja um pouquinho dos fundamentos para ajud-lo a entender os conceitos por trs do cdigo:

Os programas de computadores fazem os grficos aparecerem na tela mudando a cor e o brilho de pontos
minsculos chamados pixels.
Cada pixel composto das trs cores primrias: vermelho, verde e azul (muitas vezes abreviado para RGB em
linguagens de programao). Voc altera a cor/o brilho do pixel variando as intensidades de R, G e B, normalmente
entre os valores de 0 e 255. Por exemplo:
o se vermelho=255 e verde=0 e azul=0, o pixel aparecer vermelho brilhante.
o se vermelho=255 e verde=255 e azul=0, o pixel aparecer amarelo brilhante.
A posio do mouse pode ser detectada pelo computador e especificada em termos das coordenadas X e Y
(coordenadas horizontais e verticais). O lado esquerdo superior da tela, por exemplo, especificado por X=0 e Y=0.

Cdigo para o programa 11


Imports System
Imports System.Windows.Forms
Imports System.Drawing
Class FunWithTheMouse
Inherits Form
' Declara alguns objetos que ns queremos conversar a partir de alguns mtodos
Private pictureBox1 As PictureBox
Private label1 As Label
Private spotClicked As Point
' O mtodo construtor para nossa classe
Public Sub New()
' Configura o tamanho da janela
Me.Size = New Size(640, 480)

' Carrega uma imagem para a caixa de imagem e adiciona esta ltima para o formulrio
pictureBox1 = New PictureBox()
pictureBox1.Image = DirectCast(New Bitmap("../../images/foal.jpg"), Image)
pictureBox1.SizeMode = PictureBoxSizeMode.Normal
pictureBox1.Dock = DockStyle.Fill
Me.Controls.Add(pictureBox1)
' Adiciona um rtulo na parte de baixo, trazendo algumas instrues
label1 = New Label()
label1.BackColor = Color.Wheat
label1.Dock = DockStyle.Bottom
label1.Text = "Drag rectangle with left mouse button (draw) or another mouse button
(lighten). To scribble, hold SHIFT and move mouse."
label1.TextAlign = ContentAlignment.MiddleCenter
Me.Controls.Add(label1)
' Anexa os
AddHandler
AddHandler
AddHandler

manipuladores de eventos de mouse para a caixa de imagem


Me.pictureBox1.MouseDown, AddressOf MouseButtonIsDown
Me.pictureBox1.MouseUp, AddressOf MouseButtonIsUp
Me.pictureBox1.MouseMove, AddressOf TheMouseMoved

End Sub
' Um manipulador de evento que executado quando o mouse MOVIMENTADO
Public Sub TheMouseMoved(ByVal sender As Object, ByVal e As MouseEventArgs)
' Se o usurio estiver segurando a tecla SHIFT do teclado
If (Control.ModifierKeys And Keys.Shift) = Keys.Shift Then
' Prepara uma superfcie de desenho para a caixa de imagem
Dim g As System.Drawing.Graphics = Me.pictureBox1.CreateGraphics()
' Usa uma caneta amarela
Dim yellowPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Yellow, 3)
' Desenha um crculo (uma elipse com altura e largura iguais)
' nas coordenadas X e Y atuais do mouse
g.DrawEllipse(yellowPen, e.X, e.Y, 40, 40)
' Limpa
g.Dispose()
End If
End Sub
' Um manipulador de evento que executado quando um boto do mouse est sendo PRESSIONADO
Public Sub MouseButtonIsDown(ByVal sender As Object, ByVal e As MouseEventArgs)
' Apenas guarda AONDE o mouse foi clicado
' Quando o boto for liberado, ns iremos recuperar esta posio
spotClicked.X = e.X
' coordenada horizontal
spotClicked.Y = e.Y
' coordenada vertical
End Sub
' Um manipulador de evento que executado quando um boto do mouse liberado
Public Sub MouseButtonIsUp(ByVal sender As Object, ByVal e As MouseEventArgs)
' Ah, o usurio liberou o boto que ele estava segurando!
' Define um retngulo (ainda no visual) que descreve
' a rea da imagem que o usurio quer fazer algo com ela
Dim r As Rectangle = New Rectangle()
' O
' o
r.X
r.Y

canto esquerdo superior onde ele segurou o boto,


qual ns "guardamos" no mtodo acima
= spotClicked.X
= spotClicked.Y

' A largura e a altura do retngulo podem ser obtidas


' por subtrair o ponto original clicado do ponto do mouse no momento
' (quando o usurio estiver liberando)
r.Width = e.X - spotClicked.X

r.Height = e.Y - spotClicked.Y


If e.Button = Windows.Forms.MouseButtons.Left Then
' Se o boto esquerdo foi pressionado/liberado, simplesmente desenha
' um retngulo visual para que ele possa ver
' Prepara uma superfcie de desenho para a caixa de imagem
Dim g As Graphics = Me.pictureBox1.CreateGraphics()
' Desenha um retngulo em vermelho
Dim redPen As Pen = New Pen(Color.Red, 2)
g.DrawRectangle(redPen, r)
Else
' Se for outro boto, chama o nosso mtodo mais complicado
' que sabe como "iluminar" uma rea da foto
ChangeLightness(r)
End If
End Sub
' Um mtodo que aumenta a luminncia da parte selecionada na imagem,
' por aumentar a luminncia de cada pixel nesta rea
Public Sub ChangeLightness(ByVal rect As Rectangle)
Dim newRed As Integer, newGreen As Integer, newBlue As Integer
Dim pixel As Color
' Obtm uma cpia da imagem que est na caixa de imagem
Dim picture As System.Drawing.Bitmap = New Bitmap(Me.pictureBox1.Image)
' Uma vez que aumentar o brilho de uma rea pode levar um bom tempo,
' alerta o usurio sobre isto caso ele tenha selecionado uma rea muito grande
If (rect.Width > 150) OrElse (rect.Height > 150) Then
Dim result As DialogResult = MessageBox.Show( _
"The area you selected is large and may take a long time to lighten", _
"Warning", MessageBoxButtons.OKCancel)
' Se ele clicar em "cancelar", pula fora deste mtodo
' e retorna para quem tenha chamado ele
If result = Windows.Forms.DialogResult.Cancel Then
Return
End If
End If
' Percorre todos os pixels em dado bloco, dobrando o
' brilho das cores RGB (vermelho, verde e azul) de cada pixel
' Da esquerda para direita, percorre a largura da area selecionada ...
For x As Integer = rect.X To rect.X + rect.Width - 1
' E do topo para a base, desce a altura da rea selecionada ...
For y As Integer = rect.Y To (rect.Y + rect.Height) - 1
' L o pixel o qual ns estamos
pixel = picture.GetPixel(x, y)
' Prepara uma verso mais brilhante das trs cores primrias para cada pixel
newRed = Convert.ToInt32(Math.Round(pixel.R * 2, 0))
If newRed > 255 Then
newRed = 255
End If
newGreen = Convert.ToInt32(Math.Round(pixel.G * 2, 0))
If newGreen > 255 Then
newGreen = 255
End If
newBlue = Convert.ToInt32(Math.Round(pixel.B * 2, 0))
If newBlue > 255 Then
newBlue = 255
End If
' Aplica as novas cores para o pixel

picture.SetPixel(x, y, Color.FromArgb( _
Convert.ToByte(newRed), _
Convert.ToByte(newGreen), _
Convert.ToByte(newBlue)))
Next
Next
' Coloca a cpia modificada da imagem para a caixa de imagem
' para que o usurio possa ver as mudanas
Me.pictureBox1.Image = picture
End Sub
Shared Sub Main()
' Cria uma nova instncia da classe do nosso formulrio
Application.Run(New FunWithTheMouse())
End Sub
End Class

System.Data
Introduo
A maioria dos aplicativos existentes precisa trabalhar com bancos de dados. Pergunte a qualquer programador de uma
grande empresa e voc o ouvir falar sobre a importncia dos bancos de dados no mundo da informtica. Um programador
que possa trabalhar com bancos de dados estar em uma posio de criar muitos aplicativos realmente teis.
Voc pode possuir um banco de dados como o Microsoft Access no seu computador. Por outro lado, voc poderia instalar o
Microsoft SQL Server Express Edition, que uma tima maneira de aprender sobre o banco de dados do SQL Server, usado
em vrias das maiores empresas do mundo. O SQL Server Express est disponvel como parte da instalao do Visual Basic
Express, ento provvel que voc j o tenha instalado.

As classes System.Data no .NET Framework permitem que voc trabalhe com bancos de dados. Um banco de dados bem
diferente de coisas como imagens e documentos do processador de texto, muitas vezes chamados de no-estruturados. Um
banco de dados mais estruturado. Ele contm com mais freqncia vrias linhas com os mesmos tipos de dados,
agrupados em blocos chamados tabelas. A tabela contm uma ou mais colunas e cada coluna contm informaes
particulares para aquela linha.

As linhas so s vezes chamadas de registros e as colunas so s vezes chamadas de campos.

Veja uma representao de uma tabela de banco de dados contendo informaes sobre planetas. As colunas, neste caso,
so NomedoPlaneta, DistnciadoSol e Habitantes.

NomedoPlaneta
Mercrio
Vnus
Terra
Marte
Jpiter
Znock
Saturno
Urano
Netuno
Pluto

PLANETA
DistnciadoSol
57909
108200
149600
227940
778400
7208100
1423600
2867000
4488400
5909600

Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers
Saturnianos
Uranianos
Netunianos
Plutonianos

Voc pode ver, por exemplo, que o planeta Vnus fica a 108.200 quilmetros do Sol e que as criaturas que vivem l so
chamadas de venusianos.
Veja outra tabela, desta vez mostrando quantas criaturas foram encontradas vivendo nos planetas em cada ano.
Essas so informaes supersecretas nunca reveladas antes. Elas foram recuperadas de uma nave aliengena que caiu em uma
parte remota do deserto de Gobi. Voc deve se sentir privilegiado por ter uma cpia. Aparentemente, eles tambm usam bancos
de dados do SQL Server Express, o que facilitou para que agrupssemos uma cpia com os exemplos de cdigos.
POPULAO
NomedoPlaneta
Ano
Mercrio
2000
Vnus
2000
Terra
2000
Marte
2000
Jpiter
2000
Znock
2000
Saturno
2000
Urano
2000
Netuno
2000
Pluto
2000
Mercrio
2001
Vnus
2001
Terra
2001
Marte
2001
Jpiter
2001
Znock
2001
Saturno
2001
Urano
2001
Netuno
2001
Pluto
2001

Populao
40000
25
6000000000
325000
8426300200
550000
1000000
753425370
<NULO>
<NULO>
35000
3
6500000000
326000
8426300202
8700
75000
844360002
<NULO>
<NULO>

Olhando todas as linhas que se referem a Vnus, voc observar que existem duas. Voc pode ver que no ano 2000 existiam
25 venusianos em Vnus, mas em 2001 sobraram apenas 3 deles. Acho que os vulces os exterminaram.

No confunda tabelas de bancos de dados com planilhas. Embora seja verdade que as planilhas podem mostrar dados de
uma maneira parecida com as tabelas acima, o modo com que elas trabalham com os dados bem diferente.

A Linguagem SQL
Existem diversos bancos de dados diferentes no mundo todo: Microsoft Access, Oracle, DB2, Microsoft SQL Server, Informix,
mySQL, e a lista continua. Ento como voc conversa com um banco de dados em Visual Basic? Eles todos entendero o que
estamos pedindo?
A resposta simples que voc usa uma linguagem como o Visual Basic para empacotar e enviar alguma "linguagem de
banco de dados" ao banco de dados e ele decide como buscar e enviar de volta as colunas e linhas que voc s olicitou.
(Para dizer a verdade, existe outra camada intermediria chamada ADO.NET, mas no falaremos muito sobre isso aqui.)
Muitos anos atrs, devido a todos os diferentes bancos de dados, algumas pessoas se reuniram e concordaram com "uma
linguagem de banco de dados" que poderia falar para a maioria dos bancos de dados do mundo. Essa linguagem
chamada de SQL (abreviao de Structured Query Language). No confunda a linguagem SQL com o produto da Microsoft
chamado SQL Server a maioria dos bancos de dados suporta a linguagem SQL.

Antes de falarmos sobre como trabalhar com bancos de dados em Visual Basic, vamos nos familiarizar com os conceitos
bsicos da linguagem SQL. Veja alguns exemplos de instrues escritas em SQL e o que acontece quando voc as executa.
Os trs tipos principais de aes so SELECT para exibir alguns dados, INSERT para inserir novos dados e UPDATE para
alterar dados existentes daremos exemplos de cada um deles.
Normalmente, a maneira com que voc escreve instrues Select a seguinte:
SELECT <selecione as colunas que deseja ver>
FROM <das tabelas de bancos de dados apropriadas>
WHERE <onde alguma condio for verdadeira>

SELECT *
FROM PLANET
Recupera (obtm) todas as linhas e todas as colunas da tabela chamada PLANETA.
(O asterisco * significa todas as colunas.)

NomedoPlaneta
Mercrio
Vnus
Terra
Marte
Jpiter
Znock
Saturno
Urano
Netuno
Pluto

DistnciadoSol
57909
108200
149600
227940
778400
7208100
1423600
2867000
4488400
5909600

Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers
Saturnianos
Uranianos
Netunianos
Plutonianos

SELECT PlanetName, Inhabitants


FROM PLANET
Recupera apenas as colunas "NomedoPlaneta" e "Habitantes" para todas as linhas da tabela PLANETA.
NomedoPlaneta
Mercrio
Vnus
Terra
Marte
Jpiter
Znock
Saturno
Urano
Netuno
Pluto

Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers
Saturnianos
Uranianos
Netunianos
Plutonianos

SELECT PlanetName, Inhabitants


FROM PLANET
WHERE PlanetName='Venus'
Recupera apenas as colunas "NomedoPlaneta" e "Habitantes" para apenas aquelas linhas da tabela PLANETA que possuem o
NomedoPlaneta "Vnus".
NomedoPlaneta
Vnus

Habitantes
Venusianos

SELECT PlanetName
FROM POPULATION
WHERE Population<100000
Recupera o NomedoPlaneta e a Populao, da tabela POPULATION, onde quer que a coluna de populao possua um valor
inferior a 100000.
NomedoPlaneta
Mercrio
Vnus
Netuno
Pluto
Mercrio
Vnus
Saturno

Populao
40000
25
<NULO>
<NULO>
35000
3
75000

Netuno
Pluto

<NULO>
<NULO>

Normalmente, a maneira com que voc escreve instrues Insert a seguinte:


INSERT INTO <inserir na tabela de banco de dados qual voc deseja adicionar linhas>
(<as colunas nas quais deseja adicionar valores>)
VALUES (<os valores que voc quer adicionar para as colunas listadas acima>)

INSERT INTO PLANET


(PlanetName, DistanceFromSun, Inhabitants)
VALUES
('Fluff', 23500000, 'Fluffies')
Adiciona uma nova linha tabela PLANETA. Isso na verdade uma ao "silenciosa" (ela no recupera nenhuma linha para o
seu programa em Visual Basic), mas mostramos a tabela aqui para que voc tenha uma idia do que aconteceu.

NomedoPlaneta
Mercrio
Vnus
Terra
Marte
Jpiter
Znock
Saturno
Urano
Netuno
Pluto
Penugem

PLANETA
DistnciadoSol
57909
108200
149600
227940
778400
7208100
1423600
2867000
4488400
5909600
23500000

Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers
Saturnianos
Uranianos
Netunianos
Plutonianos
Penugianos

Normalmente, a maneira com que voc escreve instrues Update a seguinte:


UPDATE <atualizar a tabela de banco de dados que voc deseja alterar>
SET <definir as colunas que voc deseja alterar > = <novos valores>
WHERE (<onde todas as linhas que voc quer alterar atendam alguma condio>)

UPDATE PLANET
SET PlanetName='Stuff', Inhabitants='Stuffies'
WHERE PlanetName='Fluff'
Altera alguns dos valores na linha que possui um NomedoPlaneta "Penugem". Ns mostramos a tabela resultante aqui, mas,
na verdade, essa uma ao "silenciosa" e no recuperar nenhuma linha para o seu programa em Visual Basic.

NomedoPlaneta
Mercrio
Vnus
Terra
Marte
Jpiter
Znock

PLANETA
DistnciadoSol
57909
108200
149600
227940
778400
7208100

Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers

Saturno
Urano
Netuno
Pluto
Coisa

1423600
2867000
4488400
5909600
23500000

Saturnianos
Uranianos
Netunianos
Plutonianos
Coisianos

Relaes e Junes
Se voc pensar nisso, perceber que existe uma relao entre as duas tabelas PLANETA e POPULAO acima. Ambas
possuem uma coluna chamada "NomedoPlaneta". Dizemos que as duas tabelas esto relacionadas na coluna
"NomedoPlaneta" e isso nos permite coletar todas as informaes para um determinado planeta
Poderamos pegar, por exemplo, todas as linhas relacionadas a Vnus, das duas tabelas...

NomedoPlaneta
Vnus

PLANETA
DistnciadoSol
108200

Habitantes
Venusianos

POPULAO
NomedoPlaneta
Ano
Vnus
2000
Vnus
2001

Populao
25
3

e reuni-las no que parece ser uma grande tabela...

SELECT *
FROM PLANET INNER JOIN POPULATION ON PLANET.PlanetName=POPULATION.planetName
WHERE PlanetName='Venus'

NomedoPlaneta
Vnus
Vnus

PLANETAS_E_POPULAO
DistnciadoSol Habitantes
NomedoPlaneta
108200 Venusianos
Vnus
108200 Venusianos
Vnus

Ano
2000
2001

Populao
25
3

Que Banco de Dados Voc Est Usando?


Existem razes pelas quais os programadores podem querer fazer coisas especiais para bancos de dados ou situaes
especiais. No ambiente do .NET, por exemplo, existem vrias maneiras diferentes de trabalhar com dados. Se voc sabe que
est usando um banco de dados do Microsoft SQL Server, por exemplo, pode usar objetos especiais para enviar suas
consultas SQL e, por isso, funcionar muito rpido. Mas se voc estiver falando com o Microsoft Access, no poder usar
esse objeto especial.
O cdigo difere levemente ento, dependendo se voc est usando o SQL Server ou no e no temos certeza se voc est.
Ento, veja o que fizemos at agora:

Os trs programas de exemplo de banco de dados desta seo (12a, 13a e 14a) so escritos supondo que voc possui
o SQL Server Express instalado (ou uma das outras verses do SQL Server).
Mas caso voc no possua, tambm inclumos, com os exemplos de disco, uma verso de cada que usa o Microsoft
Access. Esses so os programas 12b, 13b e 14b e eles sero executados sem a necessidade de nenhuma configurao
de banco de dados.

Incentivamos voc a instalar o SQL Server Express em algum estgio, no entanto; ele um banco de dados muito melhor
com o qual programar. Alm disso, as habilidades do SQL Server so mais valiosas no mundo dos negcios ento, quanto
antes voc conhecer o SQL Server, melhor. Voc pode baix-lo gratuitamente em
http://msdn.microsoft.com/vstudio/express/sql/download/.

Se voc possui o Microsoft SQL Server Express instalado e em funcionamento, use os exemplos 12a, 13a e 14a. Se no
possui ou se tiver problemas ao faz-lo funcionar, voc pode recorrer aos exemplos 12b, 13b e 14b, que fazem a mesma
coisa sem a necessidade de um banco de dados instalado.

Conversando Com um Banco de Dados em Visual Basic


Nos seguintes exemplos de Visual Basic, usaremos as classes SqlConnection e SqlCommand para se comunicarem com o
banco de dados de exemplo do SQL Server Express chamado Planetas. Essas so classes especiais para conversar com
qualquer verso do Microsoft SQL Server. Trabalharemos mais com os dados de duas maneiras diferentes:
1.

Usando a classe SqlDataReader.


A classe SqlDataReader permite a voc muito controle de programao, uma vez que voc pode percorrer cada
linha de dados sozinho e escolher o que fazer com os valores que recebe.

2.

Usando as classes SqlDataAdapter e DataSet.


Datasets so teis se voc deseja ter as linhas de dados automaticamente exibidas em um controle de formulrio
como um datagrid. Essa abordagem requer algumas linhas de cdigo para que se obtenham os dados do banco de
dados, mas evitar muitos problemas em exibir esses mesmos dados porque controles inteligentes, como o
DataGridView, entendem como se vincular a um dataset.

Programa de Exemplo 12
O seguinte programa se conecta a um banco de dados do SQL Server Express e envia a ele uma consulta SQL. Ele ento
recupera os resultados, percorre cada linha e escreve cada valor NomedoPlaneta em uma nova linha em um controle Label.
Cdigo para o programa 12a (verso do SQL Server Express consulte o exemplo 12b do disco para a verso do Microsoft
Access)
Imports
Imports
Imports
Imports

System
System.Windows.Forms
System.Data
System.Data.SqlClient

' Namespace para trabalhar com banco de dados do SQL Server

Class SimpleDataAccess
Inherits Form
Public Sub New()
' Configura o ttulo da janela
Me.Text = "A simple databasing program"
' Determina o caminho fsico para o banco de dados de exemplo PLANETAS
Dim dbLocation As String = _
System.IO.Path.GetFullPath("../../../database/SqlServer/planets.mdf")
' Adiciona um rtulo que prenche o formulrio
Dim label1 As Label = New Label()
label1.Dock = DockStyle.Fill
Me.Controls.Add(label1)
' Conecta ao banco de dados SQL Server
Dim connection1 As SqlConnection = New SqlConnection( _
"Data source=.\SQLEXPRESS;User Instance=true;" _
& "Integrated Security=SSPI;AttachDBFilename=" & dbLocation)
connection1.Open()
' Conversa com o banco de dados pede os dados dos planetas para ele
Dim sql As String = "SELECT * FROM PLANET"
Dim command1 As SqlCommand = New SqlCommand(sql, connection1)
Dim dataReader1 As SqlDataReader = command1.ExecuteReader()
' Percorre os registros retornados e adiciona o nome de cada planeta para o rtulo
While dataReader1.Read()
label1.Text = label1.Text & dataReader1("PlanetName").ToString() & Environment.NewLine
End While

' Limpa
dataReader1.Close()
connection1.Close()
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New SimpleDataAccess())
End Sub
End Class

Programa de Exemplo 13
Neste prximo programa, queremos exibir vrias colunas de dados, o que seria muito confuso em um Label ento usamos
um DataGridView.
Executamos a mesma consulta do programa anterior, mas dessa vez colocamos o resultados em um DataSet. Vinculamos
ento o DataGridView ao DataSet e ele exibe automaticamente todos os dados.
Vincular alguns dados de back-end invisveis a um controle visual conhecido como vinculao de dados.
Cdigo para o programa 13a (verso do SQL Server Express consulte o exemplo 13b do disco para a verso do Microsoft
Access)
Imports System.Windows.Forms
Imports System.Data
Imports System.Data.SqlClient

' Namespace para trabalhar com banco de dados do SQL Server

Class DataInGrid
Inherits Form
Public Sub New()
' Configura o ttulo da janela
Me.Text = "One-Way Database Grid Binding"
' Determina o caminho fsico para o banco de dados de exemplo PLANETAS
Dim dbLocation As String = _
System.IO.Path.GetFullPath("../../../database/SqlServer/planets.mdf")
' Adiciona uma grade de dados para o formulrio
Dim DataGridView1 As DataGridView = New DataGridView()
DataGridView1.Width = Me.Width
DataGridView1.Height = 250
DataGridView1.DataMember = "Table"
DataGridView1.Dock = DockStyle.Fill
Me.Controls.Add(DataGridView1)

' Conecta ao banco de dados SQL Server


Dim connection1 As SqlConnection = New SqlConnection( _
"Data source=.\SQLEXPRESS;User Instance=true;" _
& "Integrated Security=SSPI;AttachDBFilename=" & dbLocation)
connection1.Open()
' O conjunto de dados ir armazenar os dados na memria (em estruturas chamadas DataTables)
Dim dataSet1 As DataSet = New DataSet()
' O adaptador de dados ser a ponte entre o banco de dados e o conjunto de dados
Dim sqlDataAdapter1 As SqlDataAdapter = New SqlDataAdapter()
' Diz ao adaptador o que ns queremos que ele busque e de onde
sqlDataAdapter1.SelectCommand = New SqlCommand("SELECT * FROM PLANET", connection1)
' Preenche o conjunto de dados na memria com os dados obtidos
sqlDataAdapter1.Fill(dataSet1)
' Anexa os dados na memria para a grade de dados
DataGridView1.DataSource = dataSet1
' Fecha a conexo do banco de dados
connection1.Close()
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New DataInGrid())
End Sub
End Class

Programa de Exemplo 14
Exibir dados em um DataGridView tudo bem, mas voc perceber que, se alterar os dados, eles no sero salvos de volta no
banco de dados. Ento, vamos modificar a abordagem para permitir uma vinculao de dados bidirecional.
Ns iremos trapacear um pouquinho aqui (ei, isso chamado de aumentar nossa produtividade) no escrevendo nossos
prprios comandos do SQL UPDATE e INSERT o namespace System.Data possui uma pequena classe inteligente chamada
CommandBuilder que pode descobrir como escrev-los sozinha e trata deles nos bastidores.
Cdigo para o programa 14a (verso do SQL Server Express consulte o exemplo 14b do disco para a verso do Microsoft
Access)

Imports System.Windows.Forms
Imports System.Data
Imports System.Data.SqlClient ' Namespace para trabalhar com banco de dados do SQL Server
Class PlanetsForm
Inherits Form
' Declara alguns objetos que ns conversaremos a partir de outros mtodos
Private dg As DataGridView
Private da As SqlDataAdapter
Public Sub New()
' Este o mtodo "construtor" para a classe PlanetsForm
' Configura o ttulo da janela
Me.Text = "Two-way Database Grid Binding"
' Determina o caminho fsico para o banco de dados de exemplo PLANETAS
Dim dbLocation As String = _
System.IO.Path.GetFullPath("../../../database/SqlServer/planets.mdf")
' Prepara a conexo com o banco de dados SQL Server
Dim connectionString As String = _
"Data source=.\SQLEXPRESS;User Instance=true;" _
& "Integrated Security=SSPI;AttachDBFilename=" & dbLocation
' Adiciona um boto "Salvar" para o formulrio
Dim btnSave As Button = New Button()
btnSave.Text = "Save"
AddHandler btnSave.Click, AddressOf BtnSave_Click
btnSave.Dock = DockStyle.Top
Me.Controls.Add(btnSave)
' Adiciona uma grade de dados para o formulrio
dg = New DataGridView()
dg.Width = Me.Width
dg.Height = 250
dg.Dock = DockStyle.Fill
Me.Controls.Add(dg)
' Instancia alguns objetos que so especialistas com dados e usa-os juntos
' "vincular" a grade de dados com os dados finais que ns queremos
' O adaptador atua como uma ponte entre o banco de dados e a tabela na memria
da = New SqlDataAdapter("SELECT * FROM PLANET", connectionString)
' O construtor manipula o UPDATE e o INSERT automaticamente
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
' A tabela acompanha, na memria, as mudanas
Dim dt As DataTable = New DataTable()
' Preenche a tabela com os dados
da.Fill(dt)
' Vincula a tabela grade de dados
dg.DataSource = dt
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New PlanetsForm())
End Sub
Private Sub BtnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' Uma vez que o boto Salvar for clicado, atualiza o banco de dados
' com quaisquer mudanas feitas na grade de dados para origem de dados vinculada,
' que neste caso uma tabela.
da.Update(DirectCast(dg.DataSource, DataTable))

MessageBox.Show("Data has been saved", "For your information", MessageBoxButtons.OK)


End Sub
End Class

Tente modificar alguns valores e inserir novos. Clique em Salvar e feche o formulrio. Se voc executar o programa
novamente, ver que os dados realmente foram atualizados/inseridos no banco de dados.
E Se Eu No Estiver Usando o SQL Server Express?
Aqueles de vocs que no possurem uma verso do Microsoft SQL Server instalado, e possurem um banco de dados
diferente com o qual voc deseja falar, precisaro fazer alguns pequenos ajustes.
Em primeiro lugar, a cadeia de caracteres da conexo que descreve o local, o tipo etc. do banco de dados deve ser alterada.
Uma cadeia de caracteres da conexo para o SQL Server Express pode ser parecida com isto:
Dim connectionString As String = "Integrated Security=SSPI;Persist Security Info=False; _
& "Initial Catalog=Northwind;Data Source=localhost"

ou com isto, se voc estiver se conectando diretamente ao arquivo do banco de dados (como nos exemplos deste livro):
Dim connectionString As String = "Data source=.\SQLEXPRESS;Integrated Security=SSPI;" _
& "AttachDBFilename=C:\Visual Basic4#KIDS\examples\database\SqlServer\planets.mdf;" _
& "User Instance=true"

(Devido a restries de espao, estamos reunindo tudo isso em algumas linhas, mas, nesse formato, a parte entre aspas
realmente precisa estar em uma linha.)
Uma cadeia de caracteres da conexo para o Microsoft Access pode ser parecida com isto:
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=C:\Visual Basic4#KIDS\examples\database\Access\planets.mdb;"

(como explicado mais acima, voc precisaria escrever isso em uma linha.)
Outros bancos de dados tero cada um seu formato particular. Voc pode encontrar exemplos na documentao de ajuda
do Visual Basic Express ou na documentao que acompanha seu banco de dados.

Alm de alterar a cadeia de caracteres da conexo, voc pode alterar tambm as classes Sql para classes OleDb.
Comece incluindo o namespace System.Data.OleDb no lugar do namespace System.Data. SqlClient. Este contm classes
que podem funcionar com uma variedade de bancos de dados.
Imports System.Data.OleDb
Em seguida, troque as classes que voc usa para funcionar com os dados, da seguinte forma:

SQL Server
SqlCommand

Bancos de Dados Gerais


OleDbCommand

SqlCommandBuilder OleDbCommandBuilder
SqlDataAdapter

OleDbDataAdapter

SqlConnection

OleDbConnection

System.Xml
Introduo
As classes em System.Xml o ajudam a trabalhar com dados XML de vrias maneiras. Tarefas comuns compreendem:

abrir um documento XML


ler um trecho de XML para extrair alguns valores especficos
escrever um arquivo XML no disco

Uma Breve Introduo ao XML


O XML (Extensible Markup Language) est em todos os lugares hoje em dia e provavelmente voc j ouviu falar dele. O XML
um grande exemplo de uma linguagem que as pessoas e os computadores podem entender. Enquanto alguns sistemas de
computadores funcionam com dados que parecem ser uma baguna confusa aos humanos, o XML escrito em texto
simples e pode ser lido pelo caipira comum.
Voc pode, por exemplo, reunir um documento XML como o seguinte para manter alguns dados geogrficos em disco:

<?xml version="1.0" encoding="utf-8" ?>

Todo documento XML possui essa primeira linha


simplesmente para que programas saibam que h
XML por vir

<Terra>

O bloco mais externo

<Continente>
Amrica do Sul
<Pais capital="Santiago">
Chile
</Pais>
<Pais capital="Buenos Aires">
Argentina
</Pais>
</Continente>

Um bloco aninhado (recuado) com informaes


sobre o continente sul-americano

<Continente>
sia
<Pais capital="Bagd">
Iraque
</Pais>
<Pais capital="Nova Delhi">
ndia
</Pais>

Blocos mais profundamente aninhados com


informaes sobre dois pases do continente
asitico

</Continente>
</Terra>

muito parecido com HTML, mas voc livre para criar seus prprios nomes de marca em XML.
Vamos falar de dois termos que voc precisar entender se for ler mais sobre XML.
Elementos
Os dados XML so mantidos dentro de elementos. Um elemento possui um nome e normalmente armazena um valor. No
exemplo abaixo, o elemento "Pas" possui o valor "Argentina".
nome do valor do
elemento elemento

<Pais> Argentina</Pais>
Como voc pode ver acima, um elemento representado com uma marca de abertura e uma marca de fechamento. A marca
de fechamento deve ser nomeada exatamente como a marca de abertura, mas deve incluir uma barra "/".
Se o elemento no possuir valores, legal usar no lugar apenas uma marca e fech-lo imediatamente.
nome do
elemento

<Pais />
Atributos
Mas podemos querer descrever vrias coisas especiais sobre um elemento. Podemos, por exemplo, querer indicar que um
pas possui uma capital ento, como um exemplo, podemos criar um atributo de nosso elemento chamado "capital". No
exemplo abaixo, o atributo "capital" do elemento Pas Argentina igual a Buenos Aires.
nome do nome do
elemento atributo

valor do
atributo

valor do
elemento

<Pais capital ="Buenos Aires">Argentina</Pais>


Tudo isso muito fcil para ns, humanos, lermos e, como h uma estrutura clara para ele, voc pode imaginar que os
computadores podem facilmente aprender a ler tambm. "Computador, examine este documento, quan do voc se deparar
com um "<", saber que est para ler um nome de elemento. Quando voc atingir o prximo ">", saber procurar o valor do
elemento..." e assim por diante.
Programa de Exemplo 15
O programa a seguir transmite alguns dados geogrficos de um arquivo XML e os exibe em um formulrio.

Ele usa trs classes do namespace System.Xml:

XmlDocument (cria um objeto que pode carregar dados XML para que possamos trabalhar)
XmlNodeList (til para hospedar a lista de elementos que lemos do arquivo)
XmlNode (armazena um elemento XML)

Essa classe permite que o usurio digite algo chamado de expresso xPath para dizer que elementos obter do arquivo xml.
Uma expresso xPath, como //terra/continente/pas significa "encontrar todos os elementos chamados pas, onde quer que
eles apaream abaixo de um elemento chamado continente, que, por sua vez, aparece abaixo de um elemento chamado
terra".

Cdigo para o programa 15


Imports
Imports
Imports
Imports
Imports

System
System.Windows.Forms
System.Drawing
System.Xml
' Namespace para trabalhar com XML de forma geral
System.Xml.XPath
' Namespace para trabalhar com "caminhos" XML

Class XmlRetriever
Inherits Form
Private
Private
Private
Private
Private

comboBox1 As ComboBox
button1 As Button
listBox1 As ListBox
richTextBox1 As RichTextBox
xmlDoc As XmlDocument

' Mtodo construtor para nossa classe


Public Sub New()
' Configura o ttulo da janela and altura
Me.Text = "XML Retrieval"
Me.Size = New Size(400, 400)
' Carrega um arquivo XML do disco para um objeto DocumentoXml na memria
xmlDoc = New XmlDocument()
xmlDoc.Load("../../data/earthData.xml")
' Prepara uma caixa de texto grande para mostrar os dados nela
richTextBox1 = New RichTextBox()
richTextBox1.Dock = DockStyle.Top
richTextBox1.AcceptsTab = True
richTextBox1.Height = 180
richTextBox1.[ReadOnly] = True
richTextBox1.BackColor = Color.Silver
' Coloca o XML na caixa de texto e adiciona a caixa de texto para o formulrio
richTextBox1.Text = xmlDoc.OuterXml
Me.Controls.Add(richTextBox1)
' Adiciona uma caixa de combinao que permite o usurio
' ou digitar uma expresso Xpath ou escolher uma j existente
' Adiciona algumas como exemplos para ajudar o usurio a aprender a escrever expresses
XPath
' (Uma caixa de combinao uma combinao de caixa de texto com caixa de listagem)
comboBox1 = New ComboBox()
comboBox1.Location = New Point(0, 200)
comboBox1.Width = 300
comboBox1.Items.Add("//Earth/Continent")
comboBox1.Items.Add("//Earth/Continent/Country")
comboBox1.Items.Add("//Earth/Continent/Country[@capital='Nairobi']")
comboBox1.SelectedIndex = 0
Me.Controls.Add(comboBox1)
' Adiciona um boto que ir fazer com que os itens correspondentes sejam mostrados
button1 = New Button()
button1.Text = "Get data"

button1.Location = New Point(310, 200)


AddHandler button1.Click, AddressOf Button1_Click
Me.Controls.Add(button1)
' Adiciona uma caixa de listagem que mostra os items retornados
listBox1 = New ListBox()
listBox1.Dock = DockStyle.Bottom
listBox1.Location = New Point(10, 10)
Me.Controls.Add(listBox1)
End Sub
Shared Sub Main()
' Inicia uma nova instncia de um aplicativo com formulrios, usando nossa classe acima
Application.Run(New XmlRetriever())
End Sub
' Um manipulador de evento que executado quando o boto clicado
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim xmlNodes As XmlNodeList
Dim xmlElement As XmlNode
Dim elementValue As String
' Usa uma estrutura try-catch para capturar e manipular quaisquer erros XPath
' ordenadamente, em vez de simplesmente deixar o programa falhar
Try
' A partir do documento XML, seleciona os items especificados pela
' consulta XPath escolhida na caixa de combinao
xmlNodes = xmlDoc.SelectNodes(comboBox1.Text)
listBox1.Items.Clear()
' Percorre todos os itens correspondentes que forem encontrados,
' adicionando cada item para a caixa de listagem
For i As Integer = 0 To xmlNodes.Count - 1
xmlElement = xmlNodes(i)
If xmlElement.HasChildNodes Then
elementValue = xmlElement.FirstChild.Value.Trim()
listBox1.Items.Add(elementValue)
End If
Next
Catch ex As XPathException
' Se um erro XPath for encontrado, informa ao usurio
MessageBox.Show("No matching data was found. Try another xPath expression.", _
"Error Encountered. " + ex.Message)
End Try
End Sub
End Class

O programa mostra o arquivo xml bruto em um controle "RichTextBox". Em seguida, abaixo da expresso xPath, que o
usurio pode modificar, os valores do elemento resultante so exibidos. Ento, depois que voc fizer esse programa
funcionar, tente alterar a expresso e clicar no boto "Get data" (Obter dados).

Parte V Alm Deste Livro

Garoto: timo Agora eu sei tudo

No possvel simplesmente baixar as informaes de que precisamos diretamente para nossas cabeas. Alm do mais, qual
seria a graa? Metade da diverso est no aprendizado. Lembra-se da sensao de conseguir executar seu primeiro
programa? Bem, ainda h muito mais para ser conquistado.
Este livro no tem a inteno de ensinar a voc tudo sobre a programao em Visual Basic. Em vez disso, ele tenta fornecer
embasamento nos conceitos fundamentais e um contato suficiente com exemplos reais, para que voc siga adiante.

D a um homem um peixe e ele comer por um dia.


Ensine um homem a pescar e ele comer por toda uma vida

O Cdigo que o Visual Basic Express Suprime Para Voc


Todos os exemplos apresentados neste livro utilizam um nico arquivo para a escrita do cdigo. s vezes, o Visual Basic
Express divide o cdigo em alguns arquivos. Queremos destacar, especialmente, o que ele faz quando voc inicia um novo
projeto de aplicativo do Windows, para que voc saiba por onde comear a escrever seu cdigo de formulrio.
A captura de tela a seguir ilustra o que acontece nesse caso. Organizamos as janelas de forma um pouco diferente do
padro para mostrar claramente o que criado para voc.

Vamos analisar as quatro janelas acima:


1.

Exibio de cdigo de Form1.vb contm o arquivo onde voc adicionar cdigo e que realizar aes no
formulrio. Voc adicionar aqui, por exemplo, um manipulador de eventos para um boto.

2.

Exibio de design de Form1.Designer.vb aqui voc pode arrastar e soltar controles, como botes, da caixa de
ferramentas. Isso evita que voc precise codificar tudo manualmente.

3.

Exibio de cdigo de Form1.Designer.vb quando um boto, por exemplo, arrastado para a superfcie de
design, o Visual Basic Express escreve um pouco de cdigo para que voc declare uma instncia de boto. O cdigo
colocado neste arquivo. Ento, o arquivo mesmo para uso do sistema para representar em cdigo o que voc
faz na superfcie de design. Normalmente, voc no ir alterar ou adicionar cdigo a este arquivo. Na verdade, o
sistema desenha a exibio de design com base nas informaes encontradas neste arquivo (a exibio de design
no tem outro arquivo este o arquivo).

4.

Exibio de cdigo de Program.vb. Este arquivo contm o familiar mtodo Main() e um pouco de cdigo para criar
automaticamente uma instncia da sua classe Form. Ento, este o arquivo responsvel por iniciar todo o
programa. No caso de um aplicativo Windows, normalmente voc no far alteraes neste arquivo.

Essa diviso de cdigo entre arquivos possvel graas a um recurso chamado classes parciais voc pode ter partes da
sua classe em arquivos fsicos diferentes. Mas por que a classe acima precisaria ser dividida entre arquivos? No precisa,
mas h um bom motivo para se fazer isso manter separado o cdigo com objetivos bsicos diferentes. Embora parea
complexo ter trs arquivos, na verdade voc obtm um nico arquivo limpo, Form1.vb, onde pode escrever todo o cdigo
no qual voc est interessado. Geralmente, o sistema cria cdigo para voc e, se tentasse despejar esse cdigo no ar quivo
onde voc est tentando escrever, isso o deixaria bastante irritado. Da mesma forma, o Visual Basic Express ficaria
terrivelmente confuso se voc comeasse a modificar os arquivos que ele considera sua propriedade. O esquema "parcial"
permite que todos tenham seu prprio espao para trabalhar. Seu territrio composto pelas duas janelas superiores
na exibio acima a exibio de design e a exibio de cdigo de Form1.vb.
claro que voc pode optar por excluir Program.vb e Form1.vb e comear com seus prprios arquivos.

Mais Algumas Dicas


Assim como em qualquer outra rea de aprendizado, muitas dvidas surgiro medida que voc prosseguir. Em geral, elas
se enquadraro nas seguintes reas:
1.

O que devo fazer quando receber uma mensagem de erro no Visual Basic Express?

Acalme-se e oua o que o computador est tentando dizer. Sabemos que algumas vezes isso no to claro, mas
tente colocar-se no lugar dele.
Leia mais sobre "depurao" no Visual Basic Express isso lhe permitir percorrer lentamente um programa, uma
linha por vez, at mesmo inspecionando os valores das suas variveis, nos bastidores, ao longo do processo. Isso
no far as correes para voc, mas ajudar na sua compreenso, pelo contato com mais informaes. O
verdadeiro "trabalho de detetive" cabe a voc.
Se parecer que no faz sentido, tente pesquisar a mensagem de erro na ajuda ou no seu mecanismo de busca
preferido na Internet. Muitas vezes, voc encontrar pistas que o faro pensar de forma diferente e compreender a
natureza do problema.
2.

Na biblioteca de classes .NET Framework...


a.
b.
c.

Como saber que classes posso encontrar?


Como saber que mtodos essas classes contm?
Como saber que parmetros transmitir para esses mtodos?

O Visual Basic Express inclui uma referncia completa a todas as classes na biblioteca de classes .NET Framework.
Selecione Help (Ajuda) -> Contents (Contedo) para abrir a ajuda e localize o tpico ".NET Framework SDK" (SDK do
.NET Framework). No exemplo a seguir, imagine que estamos procurando informaes sobre as classes disponveis
no namespace System.Windows.Forms. Vamos selecionar "Class Library" (Biblioteca de Classes) e rolar para baixo a
pgina direita at "System.Windows.Forms".

Quando voc clicar no hiperlink Systems.Windows.Forms, uma lista de classes (neste caso, incluindo Button, Label,
ComboBox etc.) ser exibida. Quando voc seleciona uma classe especfica (como ComboBox), algo parecido com a
figura a seguir exibido. Ento, clicar no hiperlink "Members" (Membros) o levar a uma pgina que lista t odos os
mtodos, propriedades e eventos disponveis na classe e especifica seus detalhes.

A grande quantidade de exemplos includos na referncia muito til. Algumas vezes, a referncia isolada pode
parecer sem sentido, mas basta clicar em "Example" (Exemplo) para que as coisas comecem a se encaixar. Se voc
no encontrar um exemplo adequado navegando na referncia, faa uma pesquisa na ajuda geral e, geralmente,
surgiro exemplos teis armazenados em outros lugares.
3.

Onde posso obter mais informaes?


Voc chegar a um ponto em que no conseguir descobrir mais por conta prpria. Isso indica que hora de
participar da comunidade, ver o que as outras pessoas esto fazendo com o Visual Basic e descobrir como
solucionam vrios problemas com o Visual Basic.

Seria til reservar algum tempo para visitar sites como estes:

o
o
o
o
o

http://msdn.microsoft.com/vstudio/express/vb/learning/
http://msdn.microsoft.com/coding4fun
http://msdn.microsoft.com/vbasic/support/ ou
http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=159&SiteID=1
http://www.gotdotnet.com
http://www.codeproject.com/vb/net/

No tenha medo de fazer algumas perguntas de "novato" nos fruns de discusso, mas sempre navegue primeiro
para ver se algum j fez a mesma pergunta.
Aproveite a sua jornada de aprendizado!

Sobre o Livro
O Visual Basic uma linguagem de programao poderosa e, ao mesmo tempo, fcil de usar. Ele representa uma tima
oportunidade para que a nova gerao de desenvolvedores comece a usar uma linguagem altamente respeitada no
mercado de trabalho atual.
Este texto apresenta a programao orientada a objeto para jovens desenvolvedores (principalmente dos 12 aos 16 anos)
em um estilo leve, permitindo que comecem a criar programas reais em ambiente Windows.

Sobre o Autor
Martin Dreyer um ex-professor do ensino secundrio que agora lidera uma equipe de desenvolvedores de software na
frica do Sul.
Sua qualificao formal consiste em um diploma de nvel superior em educao (cincias fsicas) e um bacharelado em
cincia da computao e sistemas de informao.