Академический Документы
Профессиональный Документы
Культура Документы
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!"
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!
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.
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).
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)
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:
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
Ento, hora de enfrentar a prxima parte do livro: aprender a se comunicar com o computador usando a linguagem de
programao do Visual Basic.
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
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.
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.
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
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:
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
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.
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:
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.
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.
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".
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.
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
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)
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
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
Boolean
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
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.
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.
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.
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.
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
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.
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")
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)
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
outras condies)
End Function
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
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
Ou ento poderamos chamar o mtodo diretamente na nossa instruo WriteLine, da seguinte forma:
Console.WriteLine("Susys lucky number is " & Susy.LuckyNumber(24, 14))
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
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
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.
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.
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
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
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
J melhorou, mas, e se existissem duas cidades chamadas Londres? Seria melhor acrescentar tambm o nome do pas.
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()
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
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()
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"
Gramtica como organizar as palavras corretamente, da forma aceita por todos. Isso inclui conhecimentos como
estrutura adequada das frases e pontuao.
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 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.
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
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.
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.
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".
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
Quando o computador encontra o caractere ', ele ignora tudo o que h no restante da linha.
Console.WriteLine("That is correct")
score = score + 1
If score > 10 Then
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
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:
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
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
<
Menor do que
==
Testar se igual a
<=
Menor ou igual a
>=
Maior ou igual a
Not
No
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.
<>
Diferente de
And
Ou
&
somar 2 cadeias de
caracteres
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.
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
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.
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)
O Loop For
Os loops For so geralmente usados em uma contagem. Voc pode pensar em um loop FOR da seguinte maneira:
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
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".
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.
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.
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
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".
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.
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
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
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.
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).
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.
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
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.
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
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
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)
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
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:
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.
' 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
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
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
Habitantes
Mercurianos
Venusianos
Terrestres
Marcianos
Jupiterianos
Znockers
Saturnianos
Uranianos
Netunianos
Plutonianos
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>
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
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
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
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.
2.
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
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
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)
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))
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
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:
<Terra>
<Continente>
Amrica do Sul
<Pais capital="Santiago">
Chile
</Pais>
<Pais capital="Buenos Aires">
Argentina
</Pais>
</Continente>
<Continente>
sia
<Pais capital="Bagd">
Iraque
</Pais>
<Pais capital="Nova Delhi">
ndia
</Pais>
</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
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
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).
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.
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.
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.
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.
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.