apostila de vb net

Upload: williamdepadua

Post on 02-Mar-2016

38 views

Category:

Documents


0 download

TRANSCRIPT

  • Apostila de VB.NET

    Baseado no Site www.Macoratti.net

  • .NET Framework : introduo e classes importantes

    O que o .NET Framework ? Comeamos este artigo com uma pergunta. Uma pergunta que no fcil responder. Vamos tentar neste artigo responder a pergunta e ir um pouco mais alm , dando uma pequena introduo as principais classes do .NET Framework.

    "O .NET Framework uma nova plataforma que simplifica o desenvolvimento de aplicaes para o ambiente altamente distribudo da Web". Seus objetivos principais so :

    1. Fornecer um consistente ambiente de programao orientada a objetos. 2. Fornecer um ambiente de execuo de cdigo que minimize os conflitos de

    versionamento e empacotamento/disrtribuio. 3. Prover um ambiente de execuo de cdigo que garanta a execuo segura do

    cdigo , incluindo cdigo criado por terceiros. 4. Prover um ambiente de execuo de cdigo que elimine os problemas de

    desempenho de ambientes interpretados ou de scripts. Os dois principais componentes do .NET Framework so o CLR e a livraria de classes(Class library). O CLR gerencia a memria, as threads , a verificao da segurana, a compilao e o cdigo em tempo de execuo e a livraria de classes uma coleo de classes orientadas a objeto de tipos reutilizveis integradas com a CLR . O .NET Framework pode ser usado para criar os seguintes tipos de aplicaes e servios:

    1. Aplicaes do tipo Console 2. Baseadas em scripts 3. Windows Forms 4. ASP.NET 5. Windows Services 6. XML Web Services

    O .NET Framework ento um poderoso ambiente de desenvolvimento que consiste de vrios componentes e servios combinados. constitudo de milhares de classes (umas 6 mil) que provm toda funcionalidade que antes voc encontrava quer no Windows quer no Visual Basic.

    Nota: J deu para perceber que com tantas classes encontrar aquele classe que voc precisa pode se tornar um martrio. Para facilitar a sua vida o .NET Framework organizado de forma hierrquica existem os espaos de nomes (Namespaces) que compe e indicam uma determinada ramificao na hierarquia. Nos namespaces a denominao para cada espao de nome composta de uma srie de trechos separados por um ponto. Ex: O namespace System.Data.SqlClient esta relacionado a System.Data mas no esta contido nele pois esta num nivel hierrquico superior.

    No .NET Framework h dois nomes de nvel mais elevado: System e Microsoft. Os espao de nomes System esto disponveis para usurios do VB .NET. O espao de nome Microsoft especifico do Visual Studio .

    O .NET Framework contm o CLR - Common Languague Runtime ; ele responsvel pela execuo do cdigo que voc gerou no ambiente ; quer usando VB .NET , ASP.NET ou outra linguagem .NET. Todas as linguagens so compiladas para a MSIL - Microsoft Intermediate Languague que em seguida convertido em cdigo nativo durante sua primeira execuo.(uma JVM - Java Virtual Machine da vida...).

  • Todas as linguagens com o suporte do CLR possuem o mesmo tipo de dados , com isto fica mais fcil a passagem de parmetros entre as linguagens , voc no precisa fazer mais converses nem malabarismos.

    Podemos dizer ento que o CLR o corao do .NET Framework , e , apesar disto , ele trabalhar em oculto , sendo que a parte que aparece do .NET Framework so as classes que usamos na nossa aplicao. Vejamos algumas das classes teis do ambiente que voc com certeza ir usar mais cedo ou mais tarde.

    Algumas classes importantes do .NET Framework

    1. Console - permite exibir e ler a partir da linha de comando usando uma janela DOS

    2. Math - inclui diversos clculos matemticos. 3. Random - realiza a gerao de nmeros aleatrios 4. Environment - efetua a leitura e gravao nas variveis de ambiente do

    sistema 5. Collections : ArrayList e SortedList - permite o tratamento de conjunto de itens

    Nota: Para rodar o .NET Framework existem alguns pr-requisitos de hardware . Abaixo um resumo das plataforma que suportam o .NET Framework tanto para o cliente como para o servidor:

    Cenrio Sistema Operacional

    Cliente Microsoft Windows 98 Microsoft Windows 98 Second EditionMicrosoft Windows Millennium EditionMicrosoft Windows NT 4.0 Workstation com Service Pack 6.0a ou superiorMicrosoft Windows NT 4.0 Server com Service Pack 6.0a ou superiorMicrosoft Windows 2000 ProfessionalMicrosoft Windows 2000 ServerMicrosoft Windows 2000 Advanced ServerMicrosoft Windows XP Home EditionMicrosoft Windows XP Professional

    Nota: Em todos estes sistemas requerido o Microsoft Internet Explorer 5.01 ou superior e Windows Installer 2.0 ou superior

    Servidor Microsoft Windows 2000 Professional com Service Pack 2.0 Microsoft Windows 2000 Server com Service Pack 2.0Microsoft Windows 2000 Advanced Server com Service Pack 2.0Microsoft Windows XP Professional

    Para usar caractersticas adicionais como ASP.NET, COM+ services, e SQL Server .NET Data Provider, voc vai precisar dos seguintes softwares:

    cenrio caracterstica Software Necessrio

    Cliente SQL Server .NET Data Provider

    Microsoft Data Access Components (MDAC) 2.6

    Acesso ao system management information

    Windows Management Instrumentation (WMI) (instalado com o SO no Windows 2000, Windows Millennium Edition, e Windows XP)

    COM+ services Windows 2000 Service Pack 2.0Servidor SQL Server .NET Data

    Provider Microsoft Data Access Components (MDAC) 2.7

  • ASP.NET Microsoft Internet Information Services (IIS) 5.0

    A classe MathA classe Math fornece constantes e mtodos estticos ou compartilhados ( um mtodo esttico/compartilhado pode ser usado sem instanciar a classe Math) para funes matemticas relacionadas a trigonometria , logartimos , etc.. Abaixo vou mostrar os mais importantes:

    Abs Retorna o valor absoluto do nmero (se for negativo retorna o valor positivo do nmero)

    Cos Retorna o valor do coseno de um ngulo.Exp Retorna o valor de e elevado a uma potncia especfica.Log Retorna o logartimo de um nmero.Log10 Retorna o logartimo na base 10 de um nmero.Max Retorna o maior nmero entre dois nmeros.Min Retorna o menor nmero entre dois nmeros.Pow Retorna um nmero elevado a potncia indicada.Round Retorna o nmero mais prximo de um nmero.Sign Retorna um valor que indica o sinal do nmero.Sin Retorna o valor do seno de um ngulo.Sqrt Retorna a raiz quadrada de um nmero.Tan Retorna o valor da tangente de um ngulo.

    A classe ConsoleAbaixo listamos alguns dos mtodos bsicos da classe console :

    Mtodo Descrio

    Read L informaes a partir da linha de comando.(L o prximo caractere)

    Readline L informaes a partir da linha de comando. L a prxima linha (todos os caracteres at encontrar o Enter) ( no o inclu)Setin Altera a origem de entrada para Read e ReadLine.

    SetError Altera o destino das mensagens de erro durante a execuo do seu programaSetOut Altera o destino dos mtodos Write e Writeline.

    Write Exibe informaes na linha de comando.

    Writline Exibe informaes na linha de comando.(Termina com uma nova linha)Abaixo temos um exemplo usando alguns dos mtodos acima. Vamos explicar como ele funciona:

    Podemos redirecionar a entrada , a sada ou as informaes de erro do nosso programa para qualquer destino onde houver um TextReader ou TextWriter.No exemplo abaixo iremos direcionar o resultado para um arquivo:

    Nota : A classe TextReader representa um leitor que pode ler uma srie sequncial de caracteres. Como uma classe abstrata no pode ser instnciada diretamente; devemos criar uma classe derivada que herde as caractersticas e implemente os

  • mtodos da classe TextReader.

    Imports SystemImports System.IO Module Module1 Private Const CONTADOR As Integer = 6 Public Sub Main() Dim x As Integer Dim Itens(CONTADOR) As String Dim Arquivo As TextWriter = File.CreateText("Saida_Console.txt") Dim Saida As TextWriter = Console.Out Console.WriteLine("Insira {0} itens. Tecle ENTER entre cada item informado.", CONTADOR - 1) For x = 0 To CONTADOR - 1 Itens(x) = Console.ReadLine Next Console.WriteLine() Console.SetOut(Arquivo) Console.WriteLine("Itens includos") For x = 0 To CONTADOR - 1 Console.WriteLine(Itens(x)) Next Arquivo.Close() Console.SetOut(Saida) Console.ReadLine() End Sub End ModuleO cdigo acima ir gerar o arquivo Saida_Console.txt com os dados inseridos via console pelo usurio.

    A classe EnvironmentA classe Environment permite que voc obtenha informaes a respeito do ambiente onde os seus programas so executados ( sistema operacional ,variveis de ambiente , configuraes , etc..). Alguns de seus mtodos e propriedades so descritos a seguir:

    Membro Descrio

    OSVersion Retorna informaes a respeito do sistema operacional atualVersion Obtm informaes sobre a verso da aplicaoCurrentDirectory Retorna o caminho atual do diretrioCommandLine Retorna a linha de comandos completa que iniciou a aplicao

    SystemDirectory Retorna o caminho do diretrio do sistema.(Ex: \windows\system32 )

  • GetlogicalDrivers Retorna uma lista das unidades disponveis em um array.

    GetEnvironmentVariable Retorna o valor de uma varivel de ambiente especfica.(Ex: comando Set , caminho :path , diretrio temporrio:temp)

    GetCommandLineArgs Retorna os itens listados na linha de comando quando a aplicao foi iniciada.

    Exit Encerra uma aplicao , retornando um cdigo de erro(opcional)

    A classe RandomA classe Random usada para gerar nmeros aleatrios (inteiros(Integer) , duplos(double), etc.) Seus mtodos so :

    Membro Descrio

    Next Retorna um nmero entre 0 e o valor mximo possvel para um inteiro ( algo em torno de 2 bilhes)

    Next(ValorMaximo) Retorna um nmero entre 0 e o valor definido por ValorMaximo

    Next(ValorMinimo, ValorMaximo) Retorna um inteiro entre os valores mnimo e mximo

    NextDouble Retorna um tipo double entre 0 e 1Para gerar nmeros aleatrios entre 0 e 100 fazemos:

    Dim oAleatorio As New Random

    Dim valor As Integer = oAleatorio.Next(1,10)

    Conceitos OOP

    Desde o lanamento do Visual Studio .NET eu procurei dar uma viso geral do ambiente de desenvolvimento do VB.NET e dos novos conceitos que a nova plataforma trouxe.Acho que voc j percebeu que o VB.NET trs um conjunto de ferramentas , mtodos , propriedades e conceitos antes no existentes nas verses anteriores , e, isto com certeza ir facilitar muito o trabalho do desenvolvedor que usa o Visual Basic como ferramenta. Neste artigo eu vou fazer uma abordagem bem bsica sobre os principais conceitos necessrios para escrever cdigo VB.NET : variveis , constantes , operadores , clculos , rotinas , funes , fundamentos para escrever cdigo robusto , etc... Se voc j domina estes assuntos pode parar a leitura aqui mesmo , o objetivo e fornecer uma base slida para quem esta comeando a programar usando o Visual Basic e est com medo de enfrentar a nova plataforma .NET , para quem comeou ,parou e quer voltar , para quem j comeou ... Variveis O conceito de varivel fundamental em qualquer linguagem de programao , portanto , no poderia ser diferente com o VB.NET.

  • O que uma varivel ? . Podemos dizer que varivel um lugar que usamos para armazenar uma informao que pode sofrer alterao durante a execuo de um programa. As variveis so usadas para guardar valores que sero usados durante o decorrer do programa , para guardar informaes fornecidas pelo usurio e que ser exibida mais tarde. Cada varivel que usamos identificada por um nome e por um tipo. Voc pode guardar informao de diversos tipos em uma varivel : nmeros pequenos , nmeros mdios , nmeros grandes , letras , palavras , frases , pginas de texto , etc...; Ento dizemos que uma varivel tem um nome que a identifica e um tipo de dado que esta armazenando. Quando voc guarda uma informao em uma varivel esta usando a memria do computador para isto , e , quanto maior a informao que voc guardar mais memria voc vai gastar dependendo do tipo de varivel que decidir usar. Se voc precisar realizar clculos que envolvam somente valores inteiros dever procurar usar uma varivel do tipo Integer , voc pode usar uma varivel do tipo Long , Single e Double mas com isto ir gastar mais memria. Podemos criar trs tipos bsicos de variveis no VB.NET :

    1. Variveis simples - usadas para guardar valores simples como nmeros e strings(alfanumricas)

    2. Variveis complexas - usadas para guardar valores mais complexos , vetores , e tipos definidos pelo usurio

    3. Variveis objeto - usadas para guardar variveis objetoVariveis Simples As variveis simples guardam nmeros e strings ; neste caso podemos ter nmeros pequenos e nmeros maiores , com o intuto de economizar memria podemos dividir estas variveis nos seguintes grupos de tipos :

    1. Inteiros2. Decimais3. Strings e caracteres4. Outras (data , Boolean)

    Inteiros Os inteiros so valores numricos que no possuem casas decimais e so muito usadas em qualquer programa VB.NET . No gastam muita memria do computador e tornam o processamento e os clculos mais rpidos. Por isto se voc pode escolher um tipo de varivel escolha Inteiro. Na tabela abaixo as variveis do tipo Inteiro:

    Tipo de Dado Tamanho em Bytes

    Intervalo Comentrio

    Byte 1 0 at 255

    O tipo de menor tamanho. No suporta valores negativos.

    Short 2 -32768 at 32767

    Usado para contadores e faixas de valores de pequeno intervalo.

    Integer 4 -2.147.483.648 at 2.147.483.647 O tipo mais rpido dos inteiros.

    Long 8 -9,223,372,036,854,775,808 at 9,223,372,036,854,775,807.

    Indicada tratar valores no intervalo.

  • Nmeros com casas decimais

    Tipo de Dado

    Tamanho em Bytes

    Intervalo Comentrio

    Single 4

    -3.402823x 10^38 ate 1.401298 x 10^-45 (negativos) e

    1.401298x10^-45 at 3.402823x10^38 (positivos)

    Para clculos que exijam certa preciso.

    Double 8

    -1.79769313486231570E+308 at -4.94065645841246544E-324 (negativos)

    4.94065645841246544E-324 at 1.79769313486231570E+308 (positivos)

    Trata valores com dupla preciso at 15 casas decimais ; usado para clculos com nmeros muito grandes que exijam muita preciso.

    String e Caracteres Para tratar caracteres , palavras , texto usamos as variveis do tipo :

    Tipo de Dado

    Tamanho em Bytes

    Intervalo Comentrio

    Char 2 0 through 65535 (sem sinal). Usada para tratar um caractere.

    StringDepende da plataforma at 2 bilhes de caracteres

    Pode tratar at 1,7 milhoes de pginas de texto

    Note que cada caractere precisa de 2 bytes para ser representado , pois o sistema usado aqui o UNICODE. No sistema ASCII cada caractere representado por um byte(com isto podemos representar apensa 256 caracteres) ;Para acomodar caracteres especiais usados em outras lnguas ( Russo , Grego , Japons) e incluir tambm outros snbolos o sistema UNICODE usa dois bytes para representar cada caractere. O VB.NET usa o UNICODE para todos os caracteres. Outros tipos de variveis

    Tipo de Dado

    Tamanho em Bytes

    Intervalo Comentrio

    Boolean 2 True ou False Usada tratar valores que podem assumir Falso ou verdadeiro.Date 8 01/01/100 at 31/12/9999 Usado no tratamento de datas.

    Nota: Voc pode armazenar datas em outro tipo de varivel como String ou Integer , mas para evitar dores de cabea procure usar o tipo Date. Declarando variveis Agora que j falamos sobre variveis e seus tipos vamos ver como usar variveis em

  • um programa VB.NET. A maneira mais simples de usar uma varivel usar a palavra chave Dim (dimension) seguida pelo nome da varivel , a palavra chave AS e o tipo da varivel. Exemplo:

    Dim valor As Integer

    Aqui estamos criando uma nova varivel chamada valor que ir ocupar 4 bytes e que poder tratar valores numricos na entre : -2.147.483.648 at 2.147.483.647

    O VB.NET trouxe como novidade a possibilidade de atribuir o valor para a varivel durante a sua criao usando a linha da declarao. Assim : Dim valor As Integer = 100 ou Dim dtNascimento As Date = #15/03/1978# ou Dim nome As String = "Macoratti" Para maiores detalhes sobre este tpico leia o artigo : VB.NET - Declarao de variveis o que mudou ? Vetores ( Arrays) Os vetores so usados para armazenar e referenciar uma srie de variveis pelo mesmo nome (uma coleo de valores relacionados). Assim podemos usar um vetor para armazenar todos os nomes dos alunos de uma escola , todas as datas de aniversrio dos seus amigos, todos os valores da sua conta corrente , etc.... Cada item armazenado no vetor identificado por um ndice. A dimenso de um array o nmero que identifica quando ndices iremos usar para identificar uma item do array .Um array pode ter de uma at 32 dimenses. Cada dimenso de um array possui um comprimento diferente de zero. Os elementos de um array so contguos e iniciam no ndice igual a zero at o valor de maior valor. Quanto maior a dimenso do array voc usar mais memria vai precisar ser alocada. Exemplos: Vetores de uma dimenso

    Dim ValoresDiarios(365) as Decimal - aloca espao para itens de (0) at (365)Dim Meses(11) As String - aloca espao para elementos com indicce de 0 a 11 - teremos 12 elementosDim Matriz(49) AS integer - aloca espao para elementos com ndicce de 0 a 49 - (50 elementos)

    Vetores de duas dimenses

    Dim retangulo(4,9) As Single - aloca espao para elementos de 0 a 4 e para elementos de 0 a 9

    Acima declaramos um array de duas dimenses que possuir 5 linhas ( 0 a 4) e 10 colunas ( 0 a 9) perfazendo um total de 50 elementos. Podemos tambm definir array usando a seguinte sintaxe: Dim semana() As String = {"Segunda" , "Terca", "Quarta" , "Quinta" , "Sexta" , "Sabado" , "Domingo"}

    Neste caso j definimos quais os elementos do vetor semana. Assim para obter o elemento segunda fazemos : dia = semana(0)

  • Alm disto podemos atribuir diretamente a cada elemento o seu valor : Dim Datas(3) As DateDatas(0)="12/05/2002"Datas(1)="25/08/1965"Datas(2)="30/03/1978" Como os arrays no possuem um tamanho fixo no VB.NET podemos alterar o tamanho de um array criado previamente usando a declarao ReDim. Ex: ReDim Matriz(59) - redimensiona o array criado usando a instruo - Dim Matriz(49) AS integer Obs: No VB.NET no podemos iniciar um array usando a declarao : Dim valor(2 to 10) As Single quando fazamos isto no VB6 , as matrizes ficavam com o tamanho fixo e no podiam ser redimensionadas com a declarao Redim.No VB.NET todas as matrizes podem ser redimensionveis atravs da declarao Redim , voc s no pode mudar o nmero de dimenses da matriz. Alm disto o VB.NET trouxe inovaes na sintaxe da declarao de matrizes. Podemos ter :

    Dim Salas(15) As Integer = identico a = Dim Salas() As Integer = New Integer(12) {} Dim Salas As Integer = { 1, 2, 3 , 4, 5, 6, 7, 8, 9, 10, 11, 12} - inicializa a matriz com valores Nota: Se voc no definir um valor inicial para uma varivel o VB.NET ir atribuir valores padres conforme a tabela abaixo: Tipo Valor

    Boolean False

    Date 12:00:00AM

    Tipos Numricos 0

    Objeto Nothing

    Constantes Constantes sos valores que no sofrem alteraes durante a execuo do programa. (Exemplos : As constantes fsicas e matemticas : PI , o valor de e(logaritimo neperiano) , a velocidade da luz , do som , etc... Declaramos um valor como sendo uma constante na sua declarao. As duas formas de declarar uma constante so : Const PI = 3,141516Const ano As integer = 365 Const nome As String = "Macoratti"

    Se voc no declarar o tipo da constante o compilador vai procurar ajustar ao valor que mais se aproxima seguindo as seguinte regras :

    Long - para valores numricos no declarados Double - Para valores numricos com decimais no

    declarados.

  • String - Para qualquer valor caractere.

    Obs: As constantes da linguagem VB sofrem alteraes no VB.NET . Abaixo mostramos algumas mudanas para constantes de cdigo de teclas :(Para ver a tabela completa clique aqui - tabela de constantes para teclas )

    Visual Basic 6.0 Equivalente- Visual Basic .NET

    vbKeyLButton (1) System.Windows.Forms.Keys.LButton

    vbKeyRButton (2) System.Windows.Forms.Keys.RButton

    vbKeyCancel (3) System.Windows.Forms.Keys.Cancel

    vbKeyMButton (4) System.Windows.Forms.Keys.MButton

    vbKeyBack (8) System.Windows.Forms.Keys.Back

    vbKeyTab (9) System.Windows.Forms.Keys.Tab

    vbKeyClear (12) System.Windows.Forms.Keys.Clear

    vbKeyReturn (13) System.Windows.Forms.Keys.Return

    vbKeyShift (16) System.Windows.Forms.Keys.ShiftKey

    vbKeyControl (17) System.Windows.Forms.Keys.ControlKey

    Operadores e funes bsicas J falamos sobre variveis e constantes no artigo anterior e vimos como so importantes , mas , de que adianta criar variveis e constantes se eu no posso fazer nada com elas ? Por isso o VB.NET oferece um conjunto de funes que podemos usar para fazer algo de til . O VB.NET possui tambm operadores matemticos que podemos usar para realizar clculos outras operaes : junte tudo isto e j podemos ver o VB.NET funcionando a todo vapor. Vou mostrar a seguir os operadores mais comumente usados no Visual Basic.Net

    Operador Utilizao Exemplo

    = Atribui um valor a uma varivel ou constantes

    y = 10 ou Sobrenome = "Macoratti"

    + Soma dois valores x = y + 5 ( o valor de x ser igual a 15)

    - Subtrai um valor de outro x = y - 2 ( o valor de x ser igual a 5)

    * Multiplica dois valores x = y * 2 ( o valor de x ser igual a 20)

    / Divide um valor por outro x = y / 2 ( o valor de x ser igual a 5)

    \ Divide um valor por outro e retorna somente a parte inteira do resultado

    x = y \ 3 ( o valor de x ser igual a 3)

    Mod Divide um valor por outro e retorna o resto da operao

    x = y mod 3 ( o valor de x ser igual a 1)

    & Combina , concatena duas strings cliente = "Jose Carlos " & Sobrenome ( cliente ser igual a Jose Carlos Macoratti)

  • += soma o valor e atribui o resultado y += 3 ( y ser igual a 13)

    -= subtrai o valor e atribui o resultado y -= 6 ( y ser igual a 7)

    *= multiplica o valor e atribui o resultado y *= 2 ( y ser igual a 14)

    /= divide o valor e atribuiu o resultado y /= 2 ( y ser igual a 7)

    &= concatena a string e atribui o resultado

    Sobrenome &= ", Jose Carlos" ( Sobrenome ser igual a "Macoratti , Jose Carlos"

    ^ Eleva um valor a um determinado expoente

    3 ^ 3 ( 3 elevado a 3 ; resultado = 27 )

    Sqrt Extrai a raiz quadrada de um valor (Namespace System classe Math)

    x = Math.Sqrt(81) ( O valor de x ser igual a 9)

    Obs: A classe Math do namespace System possui diversos mtodos que oferecem um suporte matemtico. (Ex: Atan , Exp , Sign , Sqrt , Pow , Min , Round , Abs , Cos , Sin , Tan , etc...) Alm destas funes oferecidas pelo .NET Framework o Visual Basic .NET possui muitas funes intrnsecas que permite realizar alm de converses entre tipos de variveis , clculos matemticos , manipulao de strings , etc. Vejamos primeiro as funes para converso de variveis: Todas as funes de converso no VB.NET iniciam com a letra C ( de converso ) e terminam com uma forma abreviada do novo tipo . Existem tambm a funo de converso genrica - Ctype - que pode converter para qualquer tipo. Vejamos as principais: Funo

    Descrio Exemplo

    Cbool

    Converte para um Booleano ( False ou True). False ou 0 ser definido como False. Retorna um Boolean

    Dim A, B, C As IntegerDim Check As BooleanA = 5B = 5Check = CBool(A = B) ' Check ser True.' ...C = 0Check = CBool(C) ' Check ser False.

    Cbyte

    Converte para um Byte . Qualquer valor maior que 255 ou valor fracionrio ser perdido. Retorna um Byte.

    Dim MyDouble As DoubleDim MyByte As ByteMyDouble = 125.5678MyByte = CByte(MyDouble) ' MyByte ser igual a

    CChar

    Converte para um Caracter . Qualquer valor maior que 65,535 ser perdido e , se voc tentar converter uma string somente o primeiro caractere ser convertido.

    Dim MyString As StringDim MyChar As CharMyString = "BCD" 'converte s o primeiro caractereMyChar = CChar(MyString) ' MyChar ser igual a "B".

  • CDate

    Converte para um Date. Aceita qualquer representao de data e tempo.

    Dim MyDateString, MyTimeString As StringDim MyDate, MyTime As DateMyDateString = "February 12, 1969"MyTimeString = "4:35:47 PM"' ...MyDate = CDate(MyDateString) ' Converte p/ o tipo Date.MyTime = CDate(MyTimeString) ' Converte p/ o tipo Date.

    CDbl Converte para um Double.

    Dim MyDec As DecimalDim MyDouble As DoubleMyDec = 234.456784D .MyDouble = CDbl(MyDec * 8.2D * 0.01D) ' Converte para Double

    CDec Converte para um Decimal.

    Dim MyDouble As DoubleDim MyDecimal As DecimalMyDouble = 10000000.0587MyDecimal = CDec(MyDouble) ' Converte para Decimal.

    CInt

    Converte para um inteiro. Valores de -2,147,483,648 at 2,147,483,647 . Fraes so arredondadas.

    Dim MyDouble As DoubleDim MyInt As IntegerMyDouble = 2345.5678MyInt = CInt(MyDouble) ' MyInt ser igual a 2346.

    CLng

    Converte para um Longo. Valores -9,223,372,036,854,775,808 at 9,223,372,036,854,775,807. Fraes so arredondadas.

    Dim MyDbl1, MyDbl2 As DoubleDim MyLong1, MyLong2 As LongMyDbl1 = 25427.45MyDbl2 = 25427.55MyLong1 = CLng(MyDbl1) ' MyLong1 conter 25427.MyLong2 = CLng(MyDbl2) ' MyLong2 conter 25428.

    CSht

    Converte para um Short. Valores de 32,768 a 32,767. Fraes so arredondadas.

    Dim MyByte as ByteDim MyShort as ShortMyByte = 100MyShort = CShort(MyByte) ' Converte para Short.

    CStr

    converte para um String. Se for uma Data o retorno ser no formato - Short Date.

    Dim MyDouble As DoubleDim MyString As StringMyDouble = 437.324MyString = CStr(MyDouble) ' MyString ser igual a "437.324".

    CSng

    Converte para um Single . -3.402823E+38 at -1.401298E-45 // 1.401298E-45 at 3.402823E+38

    Dim MyDouble1, MyDouble2 As DoubleDim MySingle1, MySingle2 As SingleMyDouble1 = 75.3421105MyDouble2 = 75.3421567MySingle1 = CSng(MyDouble1) ' MySingle1 ser igual a 75.34211.MySingle2 = CSng(MyDouble2) ' MySingle2 ser igual a 75.34216.

    CObj Converte para um objeto.

    Dim MyDouble As DoubleDim MyObject As ObjectMyDouble = 2.7182818284

  • MyObject = CObj(MyDouble) ' MyDouble estar apontada para MyObject.

    Ctype

    Converte para qualquer tipo de dados. Sintaxe: Variavel = Ctype( TipoVelho , NovoTipo)

    Dim MyNumber As LongDim MyNewType As SingleMyNumber = 1000MyNewType = CType(MyNumber,Single) ' MyNewType igual a p/1000.0

    Nota:

    1. Se a expresso submetida a funo estiver fora do intervalo do tipo de dados para o qual voc quer converter ocorrer um erro

    2. Usamos estas funes para forar que o resultado de uma operao seja de um tipo particular diferente do resultado padro. Assim usamos CDec para forar para decimal em casos no qual a preciso simples, dupla ou um valor inteiro normalmente iria ocorrer.

    3. Se o valor fracionrio submetido for exatamente 0,5 , CInt e CLng iro arredondar para o nmero par mais prximo. Assim 0,5 ser arredondado para 0 e 1,5 ser arredondado para 2.

    4. CDate reconhece o formato de datas de acordo com a configurao local do sistema. Voc deve informar o dia , ms e ano na ordem correta de acordo com a configurao local.

    Funes para tratar Strings Vejamos agora as principais funes para manipular Strings : (Para maiores detalhes leia o artigo: Strings um novo enfoque ) Funo Descrio Exemplo

    LenRetorna o comprimento(tamanho) de uma string.

    a = len("Macoratti") => a = 9

    ChrRetorna o caractere correspondente ao valor ASCII ou UNICODE a = Chr(56) => a = A

    AscRetorna o valor ASCII ou UNICODE do caractere correspondente a = ASC("A") => a = 56

    LeftRetorna um nmero definido de caracteres mais a esquerda de uma string

    a= Left("Macoratti",4) => a= "Maco"

    RightRetorna um nmero definido de caracteres mais a direita de uma string

    a= Rigth("Macoratti",5) => a= "oratti"

    MidRetorna uma string contendo um nmero definido de caracteres. Sintaxe: Mid(String , inicio, tamanho)

    a= Mid("Macoratti", 4,3) => a= "ora"

    Instr

    Retorna um inteiro informando a posio inicial da primeira ocorrncia de uma string em outra. Sintaxe: Instr( inicio , String1 , String2 , Compare)

    a= Instr( 1, "Macoratti", "t") => a= 7

    LcaseConverte os caracteres de uma string para caracteres minsculos.

    a= Lcase("Macoratti") => a="macoratti"

    UcaseConverte os caracteres de uma string para caracteres maisculos.

    a= Ucase("Macoratti") => a="MACORATTI"

  • TrimRemove todos os espaos contidos em uma string.

    a= Trim(" Macoratti ") => a="Macoratti"

    Para encerrar com as funes intrnsecas abaixo temos algumas funes teis: Funo Descrio Exemplo

    IsArray Retorna True se o parmetro for um array.

    IsDate Retorna True se o parmetro for uma Data.

    IsNumeric Retorna True se o parmetro for um nmero.

    IsObject Retorna True se o parmetro for um objeto.

    TypeName Retorna o nome do tipo de dados do parmetro.

    Now Retorna a data e hora atual.

    Today Retorna a data atual no formato: 0:00:00 a.m.

    IsDBnull Retorna True se a varivel ainda no foi iniciada com um valor.

    Dim MyVar As ObjectDim MyCheck As BooleanMyCheck = IsDBNull(MyVar) ' Retorna False.MyVar = ""MyCheck = IsDBNull(MyVar) ' Retorna False.MyVar = System.DBNull.ValueMyCheck = IsDBNull(MyVar) ' Retorna True.

    Bem , voc j tem a disposio um verdadeiro arsenal de funes que j lhe do um idia do poder de fogo do VB.NET e , tenha certeza , isto apenas o comeo. Na continuao deste artigo vou mostrar como criar suas prprias funes e do escopo das variveis.

    Escrevendo suas prprias funes

    No artigo anterior voc foi apresentado s funes que o VB.NET oferece para facilitar sua vida. Mas sempre vai ficar faltando alguma coisa ; embora o VB.NET possua milhares de funes prontas para voc usar , com certeza no dia a dia voc vai ter que criar sua prpria funo. Sem problema algum ! ; o VB.NET permite que voc crie suas prprias rotinas e funes. isto que vamos mostrar agora. Existem dois tipos de rotinas usadas no VB.NET :

    1. Sub-rotinas - Sub - So rotinas que realizam tarefas e que no retornam valor algum.

    2. Funes - Function - So rotinas que realizam tarefas e quue retornam valores.Sub-rotinas As sub-rotinas so um bloco de cdigo VB.NET que realiza um servio e no retorna

  • nenhum valor. Quando voc usa o cdigo : Console.Writeline esta usando uma sub-rotina que apenas imprime uma informao na tela e no retorna valor algum. Voc cria uma sub-rotina quando deseja realizar uma tarefa que vai ser repetida muitas vezes ou se a mesma tarefa precisa ser usada em muitos programas. Com isto voc esta agrupando o seu cdigo e tornando-o mais fcil de localizar e manter pois basta voc invocar a sua sub-rotina para fazer o servio ao invs de ter que escrever todo o cdigo novamente. Para criar uma sub-rotina voc usa a palavra-chave - Sub - seguido do nome da sub-rotina e dos parmetros que voc esta passando para ela. Os parmetros so valores que voc passa para sub-rotina usar na realizao da tarefa que lhe foi atribuda. A sub-rotina termina com a palavra-chave : End Sub. Vejamos como fica a sintaxe: Sub NomedaSubRotina (parametro1 As TipodoParametro1, Parametro2 As TipodoParametro1, ...) ' O cdigo da funo ...End Sub Abaixo temos um exemplo de uma sub-rotina que multiplica dois nmeros inteiros x e y e escreve o resultado no console: Sub Multiplica ( x As integer, y As Integer) Console.WriteLine( x & " x " & y & " = " & x*y )End Sub Para chamar a sub-rotina e passar os parmetros usamos a forma : NomeSubRotina(parametro1 , parametro2) No exemplo acima podemos fazer assim :

    Module Module1Sub Main() Console.WriteLine("Vou chamar a Sub-rotina : Multiplica com os parametros: 521 e 123.") Console.WriteLine("Pressione algo para ver o resultado...") Console.Read() Multiplica(521, 123)End Sub

    Sub Multiplica(ByVal x As Integer, ByVal y As Integer) Console.WriteLine(x & " x " & y & " = " & x * y) Console.Read() End SubEnd Module

  • O nome da sub-rotina Multiplica x e y so os parmetros do tipo inteiro que so fornecidos para a sub-rotina

    realizar a multiplicao A sub-rotina realiza a mutiplicao usando o operador * : x*y e escreve o

    resultado na tela.Funes As funes so idnticas s sub-rotinas a nica mudana que elas retorna um valor. No caso das funes usamos a palavra-chave : Function seguida do nome da funo e da relao dos parmetros e terminamos com a palavra-chave : End Function. No cdigo da funo usamos tambm a palavra-chave : Return que ir retornar o valor da funo. Assim temos: Sub NomedaFuna (parametro1 As TipodoParametro1, Parametro2 As TipodoParametro1, ...) ' O cdigo da funo ... Return ValordeRetornoEnd Sub Usando o mesmo exemplo podemos criar uma funo para multiplicar dois nmeros inteiros e retornar o resultado. Assim: Sub Multiplica ( x As integer, y As Integer) Return x*y End Sub Para chamar a funo e passar os parmetros usamos a forma : NomeFuno(parametro1 , parametro2) Um exemplo prtico pode ser o seguinte :

    Module Module1Sub Main() Console.WriteLine("Vou chamar a Funo : Multiplica c/parametros: 521 e 123.") Console.WriteLine("Pressione algo para ver o resultado...") Console.Read() Console.Write("521 x 123 = " & Multiplica(521, 123)) Console.Read()End Sub

    Function Multiplica(ByVal x As Integer, ByVal y As Integer) Return x * y End FunctionEnd Module

  • Como exemplos de funes do VB.NET podemos dar como exemplo aqueles que retornam um valor para uma operao. Exemplo as funes Sqrt que calcula a raiz quadrada de um numero e a funo Cos que calcula o coseno de um ngulo. Estas funes pertencem a classe Math.

    Module Module1Sub Main() Dim raiz, angulo As Double raiz = Math.Sqrt(100) angulo = Math.Cos(1.12) Console.WriteLine(" Raiz = " & raiz) Console.WriteLine("Angulo = " & angulo) Console.Read()End SubEnd Module O uso dos parmetros no obrigatrio nas sub-rotinas nem nas funes , assim , voc pode definir uma funo sem parmetros, mas deve definir o tipo de valor que ser retornado:

    Function CalculaPreco() As Double 'cdigo da funo ...... return valorEnd Function

    Dim Preco as Double

    Preco = CalculaPreco()

    A funo CalculaPreco no usa parmetros mas deve informar o tipo do valor que ir retornar. No caso a funo retorna um valor do tipo Double.

    Para usar a funo temos que declarar uma varivel compatvel com o valor de retorna e chamar a funo.

    Nota: as variveis que voc declara em uma sub-rotina ou funo so locais e apenas visveis pelo cdigo da funo ou sub-rotina. Alterando o valor do parmetro : ByVal ou ByRef ? Na funo multiplica usamos a palavra-chave ByVal , o que significa ByVal ? ByVal significa que estamos passando o argumento(parmetro) por valor ; desta forma a funo ou sub-rotina no pode modificar o valor do argumento. Quando voc usa ByVal o VB.NET faz uma cpia do valor do parmetro e ento o Vb.NET passa uma cpia do valor para a rotina. Desta forma a rotina no pode alterar o valor do

  • parmetro. Se quisermos permitir que o argumento seja alterado pela funo ou sub-rotina devemos usar a chave ByRef. Quando voc usa ByRef a rotina pode alterar o valor do parmetro pois recebe uma referncia ao parmetro , e, a alterao do parmetro na rotina se reflete no parmetro passado.Vejamos o exemplo abaixo:

    Module Module1Sub Main() Dim Numero As Integer = 100 Console.WriteLine("Valor de 'Numero' ANTES de chamar a sub-rotina: " & Numero) Console.Read() MudaValorParametro(Numero) Console.WriteLine("Valor de 'Numero' DEPOIS de chamar a sub-rotina: " & Numero) Console.Read() End Sub

    Sub MudaValorParametro(ByRef valor As Integer) valor = 1000 End SubEnd Module

    Escopo das variveis em rotinas e funes Para terminar vamos falar um pouco sobre o escopo. O escopo refere-se a visibilidade das variveis rotinas e funes dentro de um programa. Talvez voc tenha bons motivos para que uma rotina ou varivel no acesse todas as variveis do seu programa . Permitir que todas as variveis do seu programa seja acessadas por todas a rotinas do programa pode lhe trazer algumas dores de cabea , pois , dependendo da complexidade do programa voc pode perder o controle sobre quem esta alterando e acessando quem. At agora usamos a palavra-chave Dim para declarar uma varivel . Porm podemos declarar variveis fora das rotinas e funes e assim torn-las acessveis a outras rotinas. Para fazer isto podemos usar as palavras-chave Public e Private:

    1. Public - As variveis so visveis por toda a aplicao.2. Private - As variveis so visveis dentro do mdulo ou classe onde foram

    declaradas.Podemos usar as palavras-chave acima tambm para definir o escopo de funes e rotinas. Da mesma forma temos para funes e sub-rotinas:

    1. Public - A rotina pode ser chamada de qualquer parte de sua aplicao. o padro quando no se informa nada.

  • 2. Private - A rotina pode ser chamada somente por outra rotina dentro do mesmo mdulo ou classe onde esta definida.

    Module Module1Sub main() contador1() contador2()End Sub

    Sub contador1() Dim contador As Integer For contador = 10 To 100 Console.WriteLine(contador) Next Console.ReadLine()End Sub

    Sub contador2() Dim contador As Integer For contador = 100 To 1000 Console.WriteLine(contador) NextEnd SubEnd Module

    Module Module1Sub main() contador1() contador2()End Sub

    Dim contador As Integer Sub contador1() For contador = 10 To 100 Console.WriteLine(contador) Next Console.ReadLine()End Sub

    Sub contador2() For contador = 100 To 1000 Console.WriteLine(contador) NextEnd SubEnd Module

    varivel contador tem escopo local : as variveis so visveis somente em cada sub-rotina . declara dentro de cada rotina.

    varivel contador tem escopo global: visvel por ambas as sub-rotinas. declarada fora das rotinas.

    Os conceitos apresentados no esgotam o assunto , mesmo por que , abordei somente os conceitos mais usados.

    Classes As classes so o foco principal da OOP , em uma classe temos um tipo de dados que oferece alguma funcionalidade. No VB.NET uma classe declarada usando a palavra-chave : Class .

    Class Aluno

    End Class

    Temos ao lado a estrutura bsica de uma classe :

    1. A palavra chave : Class iniciando a classe

    2. O nome da classe : Aluno 3. A palavra-chave : End Class

    encerrando a classe

    Para comear a trabalhar com uma classe incluindo-a em um projeto VB.NET , primeiro temos que criar um projeto do tipo WIndows Application e e selecionar no menu Project|Add Class . Ser includo em seu projeto um arquivo padro com o nome de Class1.vb (a extenso .vb tambm refere-se a arquivos para formulrio, modulo , etc...)

    Nota1: A notao recomendada para dar nome a uma classe a seguinte : O primeiro

  • caracter do nome da classe deve estar em caixa alta ; assim tambm como cada primeiro caractere de uma palavra concatenada para formar o nome da classe. Ex: CalculaSalario , EnviaArquivoTexto , etc..

    Membros de uma Classe

    Uma classe pode possuir membros como : campos , propriedades , mtodos: sub-rotinas e funes. Assim vamos incluir uma sub-rotina a nossa classe Aluno:

    Class Aluno

    Public FaaAlgumaCoisa() MsgBox " Ol Pessoal ", End SubEnd Class

    As sub-rotinas e funes so chamados de mtodos. As regras usadas para dar nome aos mtodos so as mesmas que explanamos em Nota1.

    Outro tipo de membro de uma classe so os campos. Damos nomes aos campos usando a seguinte regra: somente o primeiro caractere do nome da classe deve ficar em caixa baixa , os demais primeiros caracteres das palavras concatenadas para formar o nome do campo devem ficar me caixa alta. Ex: nomeAluno , salarioIntegral , etc. Vamos criar dois campos para classe Aluno :

    Public Class Aluno

    Dim notaExame As Double = 7.8 Dim materiaExame As String = "Ingls" Public Sub MostraNota() System.Console.WriteLine(notaExame) End SubEnd Class

    Instanciando um objeto Uma classe um modelo de uma entidade que a classe representa. Para usar um campo , mtodo ou qualquer outro membro de uma classe voc vai precisar tornar a classe em um objeto . Na linguagem OOP um objeto uma instncia de uma classe ; assim para criar um objeto temos que instanciar o objeto a partir de uma classe. Vamos mostrar como fazer isto com a classe aluno:

    - Vamos incluir um mdulo no nosso projeto. Faa isto no menu Project opo Add Module- No arquivo Module1.vb temos a sub-rotina Main onde declaramos a varivel objeto - objAluno - como um objeto da classe Aluno

    - Aps instanciar o objeto temos acesso as sua funcionalidades : no nosso caso somente temo o mtodo MostraNota().

    Nota: poderamos ter usado uma sintaxe diferente para instanciar o objeto , fazendo isto em duas etapas :

    1. declarar uma varivel objeto do tipo Aluno : Dim objAluno As Aluno

    2. Instanciar o objeto com a palavra-chave - New - : objAluno = New Aluno

  • Namespaces

    Ao escrever um programa no VB.NET , escrevemos classes , funes , rotinas e outros tipos. Para organizar a aplicao agrupamos as classes dentro de namespaces . Veja o mtodo MostraNota() da Classe Aluno . Este mtodo usa a classe Console que esta dentro do namespace System , por isto tivemos que escrever : System.Console.WriteLine. ( uma regra escrever o nome do namespace na frente da classe)

    Para tornar o seu trabalho de digitao mais fcil e o seu cdigo mais limpo e legvel podemos importar um namespace que esta sendo usado com frequncia e assim no precisaremos mais ficar referenciando nome do namespace ao qual a classe pertence. Vamos aplicar isto a classe Aluno:

    Imports System

    Public Class Aluno Dim notaExame As Double = 7.8 Dim materiaExame As String = "Ingls" Public Sub MostraNota() Console.WriteLine(notaExame) End SubEnd ClassComo importamos o Namespace System , no precisamos fazer mais referncia a ela ao usar a classe Console.

    Classes - Tipos de acessoAo escrever suas classes voc pode ou no querer que outras pessoas acessem sua funcionalidade acessando suas propriedades e chamando seus mtodos. Na OOP podemos restringir o acesso a um membro de uma classe e ter assim mais controle sobre o contedo da classe. Voc quem decide se vai permitir que outras pessoas acessem os mtodos e propriedades da sua classe ou se o acesso somente poder ser feito a partir da sua prpria classe. O VB.NET oferece os seguintes nveis de acesso :

    Public - Os membros da classe no possuem qualquer restrio e podem ser acessados por qualquer programa.

    Private - Os membros somente podem ser acessados a partir da prpria classe.

    Protected - Os membros so acessveis a partir da prpria classe e das classes derivadas.

    Friend - Os membros so acessveis somente dentro do programa que possuem a declarao da classe.

    Protected Friend - Os membros so acessados somente pelo cdigo de dentro do projeto e pelo cdigo na classe derivada.

    Membros EstticosNa OOP existe um tipo especial de membro chamado membro esttico - static - no VB.NET tambm usamos o termo Shared . Um membro esttico aquele que pode ser acessado sem ser necessrio fazer a instncia do objeto , isto , eles esto sempre disponveis , basta pegar e usar. Vamos mostrar como aplicar este conceito na nossa classe Aluno:

    Public Class NotaFinal

    Public Shared Nota1 As Double = 8.5

    - Observe que criamos uma classe chamada : NotaFinal e definimos na classe cinco propriedades(membros) do tipo static

  • Public Shared Nota2 As Double = 7.6 Public Shared Nota3 As Double = 6.4 Public Shared Nota4 As Double = 5.9 Public Shared Nota5 As Double = 9.3End Class

    Public Class Aluno Dim notaExame As Double = 7.8 Dim materiaExame As String = "Ingls" Public Sub MostraNota() System.Console.WriteLine(NotaFinal.Nota2) End SubEnd Class

    (esttica)

    - No mtodo MostraNota da classe Aluno estamos acessando o membro Nota2 sem instanciar a classe NotaFinal

    - Indicamos apenas o nome da Classe e j temos o acesso aos membros estticos da mesma:

    Nota: A plataforma .NET possui muitos membros estticos. Voc usou um sem perceber . Quer ver s ? Quando criamos a classe a aluno , usamos o mtodo WriteLine da classe console para exibir as notas , pois bem , acessamos Writeline sem ter que instanciar o objeto System.Console.

    Classes - ConstrutorO que um Construtor ? Um construtor , um mtodo especial que deve estar presente em uma classe para que a classe possa ser instanciada. Um construtor tambm usado para inicializar as variveis membros da classe.

    No VB.NET este mtodo usado com o nome de New. Ora , ns no criamos a nossa classe Aluno com membros e mtodos e ela no esta funcionando ??? Eu no me lembro de ter criado nenhum construtor para a nossa classe Aluno , no entanto ela esta funcionando normalmente. Sabe porque ? Por que quando no definimos um mtodo construtor o VB.NET cria um construtor padro automaticamente para ns.

    Quando voc instancia um objeto usando a palavra-chave New o construtor da classe chamado automaticamente e se voc definir um construtor para sua classe ele que ser chamado.

    Ento um construtor um mtodo que controla a inicializao de um objeto e voc pode us-lo para realizar as operaes necessrias incializao de um objeto.

    O VB.NET permite que voc crie uma rotina Sub New() dentro da sua classe para criar um construtor. O construtor executado apenas uma vez quando voc criar a instncia do objeto. Veja no exemplo abaixo a criao de um construtor para nossa classe Aluno.

    Imports System O construtor da classe inicializa os campos

  • Public Class Aluno Dim notaExame As Double Dim materiaExame As StringSub New() MyBase.new() 'chama o construtor da classe base notaExame = 0 materiaExame = "Ingls"End SubPublic Sub MostraNota() System.Console.WriteLine(notaExame)End SubEnd Class

    notaExame e materiaExame.

    A palavra chave MyBase usada para se referir aos membros da classe base quando se trabalha em uma classe derivada. Voc usa a MyBase para se referenciar a classe base imediata e seus membros pblicos herdados.

    HeranaAgora o VB.NET possui herana . Mas o que herana ? No !!! no uma fortuna que voc recebe de um parente distante !!! Herana uma caracterstica que permite que voc extenda uma classe ,ou seja, voc pode criar novas classes e fazer com essas classes herdem as caractersticas da classe origem. Ento voc pode acrescentar novas propriedades e mtodos a estas classes.

    Uma classe que herda as caracteristicas de outra chamada de classe-filha ou subclasse . A classe que foi herdada chamada de classe-Pai ou classe base ou superclasse. No VB.NET usamos a declarao inherits para implementar a herena. O VB.NET no suporta herana mltipla , assim uma classe derivada pode ter uma nica classe base.

    Algumas consideraes sobre herana:

    Todas as classes declaradas podem ser herdadas. Se voc no quer permitir que uma classe seja herdvel inclua na declarao da classe a palavra-chave : NotInheritable. A sintaxe a seguinte :

    NotInheritable Class CalculadoraEnd Class

    A classe Calculadora no pode ser herdada.

    As classe criadas podem ser herdadas de outras classes no projeto ou de classes na mesma assemblies referenciadas no seu projeto.

    Todas as classes so herdadas de outras classes e todas descendem da classe raiz : System.Object.

    O VB.NET no suporta herana mltipla. Uma classe pblica no pode herdar uma classe privada ou Friend e uma classe

    Friend no pode herdar uma classe privada. Vou mostrar na prtica como utilizar a herana. Vamos criar uma classe que herde da classe Aluno. Vamos chamar esta classe de Teste. Assim Aluno ser a classe base e Teste a classe subclasse. A classe no vai possuir nenhum mtodo ou propriedade. Vejamos como criar a classe Teste usando herana:

    Class Teste: Inherits AlunoEnd Class

    Class Teste Inherits AlunoEnd Class

    Acima exibimos a duas maneiras de usar a palavra-chave Inherits e criar uma subclasse a partir de uma classe Pai. Pela teoria a classe Teste vai herdar todos as propriedades e mtodos da classe Aluno.

  • Ao lado temos o cdigo que instncia a classe Teste. Como a classe teste herda todas as propriedades e mtodos da classe Aluno , pois uma subclasse dela, temos acesso ao mtodo MostraNota da classe Aluno.

    Vamos agora incluir o mtodo - ImprimeMateria - na classe Teste :

    Public Class Aluno

    Public notaExame As Double Public materiaExame As String Sub New() MyBase.new() notaExame = 0 materiaExame = "Ingls" End Sub Public Sub MostraNota() System.Console.WriteLine(notaExame) End SubEnd Class

    Public Class Teste Inherits Aluno Public Sub ImprimeMateria() Console.WriteLine(materiaExame) End SubEnd Class

    O novo mtodo - ImprimeMateria - acessa a propriedade materiaExame definida como public na classe Aluno.

    Se voc alterar o tipo para private haver um erro em tempo de execuo.

    O melhor exemplo da utilizao a herana a prpria plataforma .NET Framework , ela na verdade consiste em uma hierarquia de classes onde uma classe deriva de outra. Assim a classe Button do namespace Windows.Forms uma classe filha da classe ButtonBase que por sua vez uma classe filha de Control.

    SobrecargaUm mtodo pode ser uma rotina ou funo , a diferena que a funo ir retornar um valor e a rotina no , mas tanto as rotinas como as funes aceitam argumentos que voc passa para o mtodo realizar uma operao. Geralmente voc d um nome caracterstico a uma funo ou rotina de forma a poder identific-la. Ex: calculaSoma , calculaProduto , ...

    Existem situaes no entanto onde os mtodos que precisamos usar fazem operaes idnticas mas aceitam argumentos diferentes. Por exemplo : voc pode precisar de um mtodo que imprima uma string e precisar que o mesmo mtodo imprima um valor numrico inteiro.

    Voc poderia criar dois mtodos com nomes diferentes : ImprimeString e

  • ImprimeNmero . Mas na verdade os mtodos esto fazendo a mesma coisa : usando o mtodo Print para imprimir o argumento.O VB.NET, como toda boa linguagem orientada a objetos que se preze, permite que tenhamos mltiplos mtodos com o mesmo nome mas com uma lista de argumentos diferentes. A isto chamamos : Sobrecarga ou Overloading.

    Para indicar isto no VB.NET incluimos a palavra-chave Overloads na primeira parte da assinatura do mtodo. (A assinatura o nome do mtodo).

    Nota: O uso da palavra-chave Overloads opcional e voc pode ter mtodos com o mesmo nome sem usar Overloads. Veja abaixo um exemplo de sobrecarga.

    Imports System

    Class Calculadora

    Overloads Public Function Soma(a As Integer, b As Integer) As Integer Soma = a + b End Function

    Overloads Public Function Soma(a As Double, b As Double) As Double Soma = a + b End Function

    End Class

    Module Module1

    Public Sub Main()

    Dim contador As Calculadoracontador = New Calculator() 'passando dois argumentos : inteiros Console.WriteLine(contador.Soma(1, 5)) 'passando dois argumentos : double Console.WriteLine(contador.Soma(1.3, 5.9))

    End SubEnd Module

    A classe calculadora com dois mtodos mostrando o conceito da sobrecarga

    Usando os mtodos sobrecarregados

    A sobrecarga de mtodos encontrada por toda a classe .NET Framework. A classe console do namespace System um exemplo de sobrecarga pois ela possui o mtodo Write que possui 18 assinaturas diferentes : uma aceita um Boolean outra aceita um inteiro , etc...

    Mas tome cuidado para no fazer confuso : no pense que um mtodo pode ser considerado sobrecarregado se retornar valores de diferentes tipos.

    Dois mtodos com o mesmo nome que aceitam a mesma lista de argumentos no iro compilar mesmo que retornem diferentes tipos de dados. Veja o seguinte exemplo:

    Imports SystemClass Calculadora

    Overloads Public Function Soma(a As Integer, b As Double) As Decimal Soma = a + bEnd Function

    Overloads Public Function Soma(a As Integer, b As Double) As Double Soma = a + bEnd Function

    End Class

    Ao tentar compilar o cdigo acima iremos ter a seguinte mensagem de erro:

    error BC30301: 'Public Overloads Function Add(a As Integer, b As Double) As Decimal' and 'Public Overloads Function Add(a As

  • Integer, b As Double) As Double' differ only by return type. They cannot overload each other. Quer saber por que ? Ora , se fossemos usar o mtodo com o cdigo abaixo , quais dos dois mtodos estamos querendo usar ? Percebeu ???

    Dim contador As Calculadora contador = New Calculadora() ' passando um inteiro e um Double contador.Soma(1, 5.89)

    SobreposioJ falamos sobre herana no VB.NET e para entender sobrecarga voc precisa ter os conceitos sobre herana. Relembre em VB.NET - Primeiros passos - Conceitos - V ) . Quando uma classe herda mtodos de outra classe pode ser que seja preciso sobrepor alguns dos mtodos herdados , ento , se voc quiser implementar um mtodo que foi herdado(da classe pai) de maneira diferente na que herdou(classe filha) vai estar usando sobreposio ou overriding.

    No VB.NET indicamos que um mtodo passvel de sobreposio usando a palavra-chave Overridable na classe pai (classe base) e a seguir na classe filha declaramos novamente o mtodo com a palavra-chave Overrides. Assim temos que :

    Overridable - declara que o mtodo pode ser sobreposto nas classes que herdarem da classe base

    Overrides - indica que o mtodo da classe filha ir sobrepor o mtodo da classe pai.

    Vamos a um exemplo :

    Class Pessoa

    Overridable Public Sub profissao() Console.Write("Eu sou um engenheiro.") End Sub

    End Class

    Class Funcionario : Inherits Pessoa

    Overrides Public Sub profissao() Console.Write("Eu sou funcionrio do governo.") End Sub

    End Class

    A classe pai usando o modificador Overridable no mtodo profisso

    A classe filha - Funcionrio - herda o mtodo - Profissao. Overrides indica que a classe sobrepe a classe herdada.

    O mtodo profissao na classe - Funcionario - ir sobrepor o mtodo herdado da classe pai.

    Para que um mtodo da classe pai no possa ser sobreposto usamos o modificador - NotOverridable.

    J, para definir que um mtodo seja obrigatoriamente sobreposto em uma classe filha usamos a palavra-chave - MustOverride.

    Classes Abstratas

    Pode acontecer que ao escrever um mtodo para uma classe voc no saiba como ele vai ser implementado. Neste caso, a implementao ser feita pela classe que herdar

  • o mtodo (a classe filha).

    Pode acontecer tambm que voc saiba que um determinado mtodo ser sobreposto com certeza na classe filha; ento por que definir sua implementao se ela no ser usada ?.

    Nestes casos voc apenas define a assinatura do mtodo e deixa a definio por conta da classe ir herdar a classe pai.

    Estas classes so ento chamadas classes Abstratas e o mtodo que voc no implementou chamado de mtodo abstrato.

    Um mtodo abstrato identificado pelo modificador - MustOverride - , e, a classe que possui este modificadoor no pode ser instanciada atravs da palavra chave New. Vamos a um exemplo:

    Imports System

    MustInherit Class Formas

    Public x As Integer = 9 Public y As Integer = 0

    MustOverride Sub Desenho()

    Public Function Informacao() As String Informacao = "Uma classe abstrata" End Function

    End Class

    O mtodo Desenho no esta implementado , apenas foi declarado , e dever ser sobreposto na classe que herdar a classe Formas. Dizemos ento que a classe Formas uma classe Abstrata e o mtodo Desenho um mtodo abstrato.

    Vamos agora criar uma classe que dever extender a classe abstrata ao fazer isto deveremos fornecer a implementao para todos os mtodos que precisam ser sobrepostos.

    Class Circulos: Inherits Formas

    Overrides Sub Desenho() ' Desenha um circulo End Sub

    End Class

    Class Linhas: Inherits Formas

    Overrides Sub Desenho() ' Desenha uma linha End Sub

    End Class

    Tanto a classe Circulos como a classe Linhas herdam da classe Formas e por isto precisam implementar a classe desenho.

    Interfaces

    Uma interface parecida com uma classe abstrata; a diferena que uma classe abstrata pode possuir mtodos que no estejam implementados e pode possuir mtodos que estejam implementados.

    Uma interface somente possui mtodos que no possuem implementao.

    Uma interface possui somente mtodos que no esto implementados e que devem

  • ser implementados pela classe que usar a interface.

    Como o VB.NET no suporta herana mltipla as interfaces permitem que uma classe extenda mltiplas interfaces contornando o problema (se que isto um problema ). Para implementar uma interface o VB.NET usamos o modificador - Implements .

    As interfaces so declaradas usando a palavra-chave - Interface. Geralmente o nome dado a uma interface comea com a letra I. Podemos ter duas sintaxes para o uso com interfaces:

    Interface IFormaEnd Interface

    Class Linha Implements IForma End Class

    Interface IFormaEnd Interface

    Class Linha: Implements IFormaEnd Class

    - Uma interface no VB.NET no pode conter campos , somente pode ter mtodos , propriedades e eventos. Todos os membros de uma interface so pblicos e no podem usar um modificador de acesso.

    - Na classe que implementa a interface , cada implementao do mtodo precisa especificar o mtodo da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do mtodo.

    - O nome da interface e o nome do mtodo so separados por dois pontos.(:)

    Imports System

    Interface IForma Sub Desenho() End Interface

    Class Linha Implements IForma

    Sub Desenho() Implements IForma.Desenho Console.Write("Desenha uma reta") End Sub

    End Class

    Acima temos a interface IForma definida . A classe Linha implementa a interface IForma , por isto define o mtodo Desenho.

    A classe Linha pode ser instanciada sem problemas ; j a interface , assim como as classes abstratas no podem ser instanciadas.(Usando o operador New)

  • Frmulrios : Conceitos Bsicos

    Houve muitas mudanas na , vamos chamar assim , nova verso do VB : o VB .NET. Na verdade para dar suporte a orientao a objetos(OOP) , threads , encadeamento e outras caractersticas o velho e bom VB teve que passar por profundas alteraes.

    Se voc esta comeando a usar o VB .NET , j percebeu que no pode continuar a usar a ferramenta da mesma forma que usava o VB6/VB5 ; voc tem que mudar a sua mentalidade e a forma de como costumava a programar. Para comear tudo no VB .NET so objetos , sim , eu disse tudo.

    Neste artigo eu vou mostrar alguns dos novos conceitos por trs de um dos componentes bsicos de qualquer aplicao VB : os formulrios. Vou mostrar como so realizadas algumas das tarefas bsicas relacionadas a formulrios que voc fazia no VB e como podemos faz-las no VB .NET.(algumas delas so possveis somente no VB .NET)

    Trabalhando com mltiplos formulrios no VB .NET

    1. Inicie um novo Projeto no VS .NET 2. Crie um novo projeto do tipo Windows Application 3. No menu Project vamos incluir um novo formulrio - form2.vb - na opo : Add

    Windows Form

    4. No formulrio padro do projeto - form1.vb - inclua um boto de comando e no seu evento Click insira o seguinte cdigo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frm2 As New Form2() frm2.Show()End Sub

  • 5- O nosso projeto dever conter dois formulrios : form1 e form2 e o formulrio dever ter o seguinte layout :

    6- Se voc rodar o projeto e clicar no boto - button1 - 4 vezes ir perceber que teremos 4 formulrios - form2.vb criados e exibidos conforme abaixo :

    Como evitar este comportamento indesejvel ?

    7- Agora altere o cdigo conforme mostrado abaixo:

    Private frm2 As Form2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If IsNothing(frm2) = False Then 'o formulrio esta ativo MsgBox("O formulrio j esta sendo exibido !", MsgBoxStyle.Exclamation) Else frm2 = New Form2() frm2.Show() End IfEnd Sub8- Ao executar novamente o projeto e clicar no boto - Button1 - mais de uma vez , a mensagem ir informar que o formulrio j esta sendo exibido:

  • Passando valores de variveis entre formulrios

    A maneira mais fcil de fazer isto declarar a varivel como pblica . (como voc fazia antes)

    No form1.vb declare a varivel : variavel_formulario_frm1

    Public variavel_formulario_frm1 As StringNo formulrio form2.vb podemos usar a varivel assim :

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim frm1 As Form1 frm1.variavel_formulario_frm1 = "Estou usando a variavel do form1"End SubComo esconder/mostrar um formulrio de outro formulrio

    Em um projeto com dois formulrios : form1.vb e form2.vb .

    No formulrio form1.vb inclua um boto de comando e o cdigo conforme abaixo:

    Private segundoform As New Form2() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load segundoform.MinhaRotina(Me)End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click segundoform.Show() Me.Hide()End Sub

    No formulrio form2.vb inclua o boto de comando e o cdigo conforme a seguir :

    Private primeiro_formulario As Form1 Public Sub MinhaRotina(ByRef frm As Form1) primeiro_formulario = frmEnd Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click primeiro_formulario.Show() Me.Hide()End Sub

  • Ao executar o projeto , se voc clicar no boto de comando - button1 - do formulrio - form1.vb - o segundo formulrio ser exibido e o primeiro ser oculto. O mesmo ocorre com o formulrio dois ao se clicar no boto - button1 - do formulrio - form2.vb .

    Como criar um formulrio embutido em outro. (Embedded form)

    No VB .NET podemos usar um formulrio como um container , sem precisar usar um formulrio do tipo MDI. Como os formulrios so derivados da classe Control , eles podem ser criados como controles em tempo de execuo. Podemos ento incluir um formulrio dentro de outro formulrio. Veja como fazer isto:

    - Crie no novo projeto do tipo WIndows Application e inclua um novo formulrio - form2.vb. Nosso projeto ter dois formulrios : form1.vb e form2.vb. Vamos ento 'embutir' o formulrio form2.vb no formulrio form1.vb.

    - No formulrio - form1.vb - inclua um boto de comando e no seu evento click insira o seguinte cdigo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TopLevel = False Me.Controls.Add(f) f.show()End SubDeclaramos a varivel objeto f do tipo do formulrio que desejamos embutir formulrio atual - form1.vb:

    - Executando o projeto e clicando no boto de comando - button1 - vamos ver que o formulrio form2.vb ser criado dentro do formulrio - form1.vb

    Isto possivel devido a propriedade TopLevel . Atribuindo a ela o valor False e incluindo o controle - f - derivado do formulario form2.vb no controle atual teremos o formulio embutido.

    Usando formulrios MDI

    Os formulrios MDI - Multiple Document Interface - so muito usados , pois fornecem uma interface onde possvel abrir um formulrio Principal (PAI) e a partir deste abrir diversos formulrios filhos(Child) que estaro contidos no formulrio PAI. Como fazer isto no VB .NET ?

  • No VB6/VB5 voc podia criar um formulrio MDI no seu projeto a partir do menu Project opo - Add MDI form.

    No VB.NET basta alterar a propriedade IsMDIContainer do formulrio para True , e pronto ! , temos um formulrio MDI.

    Vou criar um exemplo onde teremos 3 formulrios : Form_MDI_Pai, Form_filho1 e form_filho2 , onde o primeiro ser o container , ou o formulrio Pai , e dois restantes sero os formulrios Filhos.

    - Crie um novo projeto Windows Form e altere sua propriedade IsMDIContainter para True , incluindo a seguir dois botes de comando - Criar formulrios FILHO1 e Criar formulrios FILHO2 , conforme o layout ao lado:

    Nota : Percebeu que voc agora pode incluir controles em um formulrio MDI Pai...

    Para indicar que um formulrio FILHO de um formulrio MDI Pai basta de definir sua propriedade MdiParent = Me , indicando que ele pertence ao formulrio MDI Pai atual.

    No evento Click do boto de comando - Criar Formulrios Filhos - insira o cdigo abaixo :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frmFilho_1 As New form_filho1() frmFilho_1.MdiParent = Me frmFilho_1.Show() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frmFilho_2 As New form_filho2()

  • frmFilho_2.MdiParent = Me frmFilho_2.Show() End SubExecutando o projeto e clicando em cada um dos botes de comando , vamos ver a figura como abaixo exibindo os formulrios FILHOS exibidos:

    Conhecendo as estruturas de controle de fluxo

    Para construir um programa de computador que seja interativo e que responda de forma diferente dependendo das informaes fornecidas pelo usurio vamos precisar usar um tipo de instruo chamada de instruo de controle. Neste artigo irei abordar as duas categorias de instrues de controle : instrues condicionais e instrues de lao.

    O VB.NET suporta as seguintes estruturas ou instrues de controle :

    If ... Then ... Else Select / Case For ... NextDo ... While While ... End While Do ... LoopDo .. Until If... Then ... Else

    utilizada para avaliar uma determinada expresso e definir se um bloco de cdigo deve ou no ser executado. A sintaxe de sua estrutura completa a seguinte:

    if Then [ cdigo #2 ]ElseIf Then [ cdigo #2 ]ElseIf Then [ cdigo #3 ]......Else [ cdigo #n ] End If

    - Na estrutura bsica If Then Else ao lado temos:

    - condio - a condio a ser avaliada ; pode usar os operadores de comparao ( = , < , > , , >= ,

  • - End If - Indica o fim da estrutura de controle.

    Podemos ter as seguintes variaes:

    a estrutura na forma mais simples

    Avaliando uma condio com duas possibilidades de

    execuo.

    Aninhando duas instrues - If ... Then... Else

    if then [ codigo #1]End If

    If then [ codigo #1 ]Else [ codigo #2]End If

    if then [ cdigo #1]else if then [ cdigo #2] End IfEnd If

    Alm da forma de bloco acima exibida podemos tambm expressar uma instruo If em uma nica linha. Assim :

    Instrues If em sequncia na mesma linhaa- If < condio #1 > then [ cdigo #1 ] Ex: If x=0 then Valor = 100 b- if < condio #1 > then [ cdigo #2 ] Else [ cdigo #3 ] Ex: If hora > 12 then msg="Boa Tarde" Else msg="Bom dia" c- if < condio #1 > then [ cdigo #2 ] : [ codigo #3 ] Else [ cdigo #4 ]Ex: Ex: If hora > 12 then msg="Boa Tarde" : msg2=" >12" Else msg="Bom dia"Nota: Embora as instrues em uma nica linha as vezes possam dar ao cdigo uma melhor aparncia (caso a) voc dever considerar se a leitura do cdigo no vai ficar mais difcil.

    Existe ainda a instruo IIF que pode ser aplicada em situaes em que existam apenas duas aes , uma verdadeira e outra falsa. Sua sintaxe :

    iif ( , < cdigo executado se a instruo for verdadeira> , )

    Ex:

    Function Verifica (ByVal Teste As Integer) As String Verifica = IIf(Teste > 1000, "Grande", "Pequeno")End Function

    Operadores de comparao

    Geralmente nas condies usamos expresses de comparao onde duas expresses no booleanas utilizam um operador para realizar uma comparao. Os operadores disponveis so :

    > maior que < menor que = igual a diferente de >= maior ou igual a

  • No caso do operador especial Like podemos comparar uma varivel de string com padres que usam caracteres especiais e comuns. Estes caracteres podem ser:

    * indica a quantidade de caracteres adicionais ? repesenta um nico caractere # representa um dgito {0-9} intervalos [a-z] , [j-k] , etc.

    especifica que qualquer caractere dentro do intervalo dever ser considerado uma correspondncia

    Ex: if "Macoratti" Like "M*tti" then [cdigo]

    Operadores Lgicos

    Os operadores lgicos trabalham com expresses ou valores booleanos e retornam um resultado booleano ( Verdadeiro / Falso , Sim / No ). Nesta categoria temos os seguintes operadores :

    AND Usando este operador entre dois valores/expresses s obtemos um resultado igual a verdadeiro SE os dois forem verdadeiros.

    OR Com este operador se um dos valores/expresses for verdadeiro o resultado ser verdadeiro

    XOR Gera um resultado verdadeiro se um dos valores/expresso for verdadeiro e o outro for Falso.

    NOT Operador de negao e retorna o oposto a qualquer valor que for usado com ele.

    A seguir temos um tabela com algumas combinaes possveis entre os operadores lgicos.

    TRUE AND TRUE TRUE FALSE AND TRUE

    FALSE

    TRUE AND FALSE

    FALSE

    FALSE AND FALSE

    FALSE

    TRUE OR TRUE TRUE TRUE XOR FALSE

    TRUE

    NOT TRUE FALSE NOT FALSE TRUEA estrutura Select Case : mltiplas possibilidades

    A estrutura Select Case usada quando temos que verificar muitas condies , neste caso , embora voc ainda possa usar a estrutura If.. Then ... Else ela poderia se tornar muito complexa e difcil de tratar. Sua sintaxe a seguinte:

    Select Case < expresso > Case < condicao #1> [ codigo #1] Case < condicao #2> [ codigo #2] .....

    - a varivel ou expresso que esta sendo comparada

    - a condio lgica a ser avaliada

    - Case Else - executa o bloco de cdigo associado se nenhuma condio anterior for verdadeira.

  • Case Else [ cdigo #3]End SelectA utilizao da instruo Select Case pode simplificar muito o cdigo, abaixo as possibilidades :

    Select Case quantidade Case 1 call rotina1() Case 2,4 - podemos trabalhar com mais de uma opo para a condio : Case x,y call rotina2() Case 5 to 9 - podemos definir uma faixa de valores : Case x to y call rotina3() Case else call rotina4() End Select Laos

    Quando voc precisar executar um bloco de cdigo mais de uma vez dever usar o tipo de instruo lao (loop). Vejamos os principais:

    For ... Next

    Repete o mesmo bloco de cdigo um determinado nmero de vezes independente de qualquer condio lgica: Sua sintaxe :

    For To [step]

    [ cdigo #1] exit for

    Next [contador]

    - contador : varivel nmerica que controla o nmero de vezes que o cdigo ser executado.- ValorInicial - Valor inicial atribudo ao contador- Valorfinal - valor final que o contador ir assumir antes de encerrar a execuo do lao.- Step - especifica o valor de incremento do contador.O valor padro de uma unidade.- Exit For - interrompe a execuo do lao

    Abaixo um exemplo de utilizao de For / Next:

    For x=1 to 100 step 2 x = x+10 if x > 68 then exit for endif Next Voc usa o lao for/next quando sabe exatamente quantas vezes o bloco de cdigo dever ser executado.

    Para percorrer vetores ou objetos com um nmero determinado de elementos podemos usar o lao For Each/Next:

    O lao For Each...Next idntico ao lao For...Next mas executa o bloco de cdigo para cada elemento em uma coleo , ou invs de executar um determinado nmero de vezes. Sua sintaxe : For Each elemento In coleo '[cdigo a ser executado para cada valor do elemento]Next [ elemento ]

  • Os elementos da coleo podem ser qualquer tipo de dados. Para cada interao no lao o VB.NET define a varivel elemento para um dos elementos na coleo e executa o cdigo.While ... End While

    Este lao mais flexvel que o lao for/next . Ele executa o bloco de cdigo enquanto uma expresso booleana for verdadeira.

    While < expresso booleana >

    [ cdigo #1]

    End While

    - Voc pode usar qualquer expresso booleana

    Nota: No visual basic 6 havia a instruo While/Wend , no VB.NET a instruo Wend foi substituida por End While.

    Ex:

    While contador < 10 And valor = 5 contador = contador + 1End WhileDo ... Loop

    Este lao alm de ser simples um dos mais flexveis , ele executa o bloco de cdigo enquanto uma condio for verdadeira. A sintaxe a seguinte :

    Do [ {While | Until}

    [bloco de cdigo]

    [Exit Do]

    Loop

    - - qualquer expresso numrica ou de string avaliada pelo lao

    - Exit Do - interrompe a execuo do lao.

    Temos ento as seguintes estruturas possveis:

    Do While

    [ cdigo ]

    Loop

    Do Until

    [ cdigo ]

    Loop

    Faa enquanto a expresso for verdadeiraFaa at que a expresso torne-se verdadeira

    A diferena entre Do While e Do Until o modo como a estrutura avalia a expresso lgica. Para o Until o bloco ser executado enquanto o valor da expresso for Falsa.

    Ao escolher entre um lao While e Until use o lao que no precisar de uma negao na expresso condicional.

    Tenha cuidado a posicionar a sua instruo condicional. Se voc colocar a condio no incio do lao , o cdigo no interior do lao nunca ser executado se a condio no for atendida.

  • Voc pode colocar a condio de sada no final do lao , assim :

    Do

    [Cdigo #1}

    Loop Until

    Nota: se a expresso da condio for Null o VB.NET tratar a condio como False.

    Voc deve tomar cuidado com o seu cdigo dentro dos laos pois isto pode afeta o desempenho de sua aplicao. Abaixo algumas dicas para ajudar a voc ter um cdigo rpido:

    Evite fazer chamadas a funes dentro de laos Tenha sempre uma condio de sada de um lao No torne a condio de sada de um lao muito complexa pois ele precisa ser

    avaliada a cada passo Ao utilizar expresses booleanas coloque a parte mais simples da expresso

    do lado esquerdo

    Lao Infinito - Um lao infinito um lao que executa o cdigo no seu interior e no tem condio de sada , ou seja, o cdigo ser executado infinita vezes...

    Dica: Se por um erro de lgica seu cdigo entrar em um lao infinito use as teclas CTRL+Break para encerr-lo. Abaixo um exemplo de um lao infinito:

    Dim i as integer = 0

    While i < 100

    Console.Writeline(i)

    End While

    Adivinhe por que o lao ao lado infinito ????

    Para evitar um lao infinito procure adotar os seguintes procedimentos:

    Inicialize a varivel de controle Teste o valor da varivel de controle Execute o bloco de cdigo e verifique se ele esta correto Verifique se o valor da varivel de controle esta sendo alterado

    Try-Catch-Finally

    Capturar e tratar erros(excees) uma das tarefas obrigatrias para todo o programador. O VB.NET trouxe uma novidade que nos auxilia no tratamento de erros : o bloco try-catch-finally. (Se voc conhece Java esta em casa...).

    O bloco try-catch-finally usado para envolver o cdigo onde existe a possibilidade de uma exceo/erro ocorrer. Um bloco try-catch-finally constitudo das seguintes sees :

    1. O cdigo que pode gerar uma exceo colocando dentro do bloco try 2. Se o erro/exceo ocorrer o bloco catch entra em ao e o voc faz o

    tratamento do erro 3. Dentro do bloco finally voc coloca o cdigo que dever ser executado sempre

  • quer ocorra ou no a exceo.

    Try 'Cdigo que pode gerar(levantar) um erro.Catch 'Cdigo para tratamento de erros.Finally 'Cdigo de execuo obrigatria.End TryObs: O VB.NET ainda mantm , por questes de compatibilidade , a sintaxe : "On Error Goto" e voc ainda pode us-la mas prefira usar a estrutura try-catch.

    A estrutura try-catch-finally mais poderosa que a sintaxe anterior pois alm de permitir a voc fazer um aninhamento de vrios tratamentos de erros na mesma estrutura , torna o cdigo mais fcil de ler e manter.

    Vamos mostrar na prtica o que acabamos de afirmar:

    1- Crie uma nova aplicao do tipo Console no Visual Basic.NET

    2- No procedimento Sub Main() insira o cdigo abaixo. Este cdigo declara e inicializa trs variveis ; a inicializao da varivel k ir causar um erro pois estamos efetuando uma diviso por zero.

    Sub Main() 'Este cdigo gera um erro/exceo Console.WriteLine("Vamos dividir 10 por 0 para ver o que acontece...") Console.WriteLine()

    Dim i As Integer = 10 Dim j As Integer = 0 Dim k As Integer

    ' Esta linha vai gerar um erro k = (i / j)End Sub

    Agora execute o projeto e veja o resultado: O sistema ir gerar uma exceo/erro

    Vamos agora usar try-catch para tratar o erro. Primeiro vamos inserir o cdigo suspeito de gerar o erro no bloco try e se ocorrer um erro vamos trat-lo no bloco catch. Veja como fica uma possvel utilizao para o caso:

    Sub Main()

  • 'Este cdigo gera um erro/exceo

    try Console.WriteLine("Vamos dividir 10 por 0 para ver o que acontece...") Console.WriteLine()

    Dim i As Integer = 10 Dim j As Integer = 0 Dim k As Integer

    ' Esta linha vai gerar um erro k = (i / j)

    catch

    Console.WriteLine("Ocorreu um erro fatal... ")

    End Try

    End Sub

    Agora execute o cdigo e veja o resultado:

    Observe que no usamos o bloco finally , e que encerramos o bloco com a clusula - End Try.

    Se voc quiser , pode usar o bloco finally para executar um cdigo obrigatrio. Neste exemplo vamos incluir o bloco finally sempre executando o cdigo : Console.ReadLine()

    Dim i As Integer = 10Dim j As Integer = 0Dim k As Integer

    Try k = i \ jCatch exc As Exception Console.WriteLine("Ocorreu um erro !")Finally Console.ReadLine()End Try

    Capturando Mltiplas Excees

    Voc pode detalhar ainda mais o seu tratamento de erros prevendo mltiplas excees e tratando-as . Vejamos como fica o nosso exemplo :

    Dim i As Integer = 2147483647Dim j As Integer = 0Dim k As Integer = 0

  • Try i+ = 1 k=i/j Catch exc As DivideByZeroException Console.WriteLine("Erro: Diviso por zero")Catch exc As OverflowException Console.WriteLine("Erro: Overflow")Finally Console.ReadLine()End TryNeste cdigo estamos prevendo duas excees : Diviso por zero e Overflow. Isto permite uma detalhamento do erro facilitando a localizao de sua origem. Naturalmente voc no vai querer tratar todas as excees possveis ; neste caso voc usa um bloco catch genrico que trate os erros no previstos, algo como o cdigo abaixo:

    1. Catch exc As ExceptionConsole.WriteLine("Erro: " & exc.Message)

    Dim i As Integer = 2147483647Dim j As Integer = 0Dim k As Integer = 0

    Try i+ = 1 k=i/j Catch exc As DivideByZeroException Console.WriteLine("Erro: Diviso por zero")Catch exc As OverflowException Console.WriteLine("Erro: Overflow")Catch exc As Exception Console.WriteLine("Error: " & exc.Message)Finally Console.ReadLine()End TryEnto esquea o velho - On error go to - e passe a usar o bloco try-catch-finally ; a melhor maneira de tratar excees em seu cdigo.

    MessageBOX

    A classe Messagebox exibe textos em uma caixa de dilogo e um conjunto de botes. Ela possui somente um mtodo esttico ; o mtodo Show. Este mtodo aceita 6 parmetros principais diferentes e usar todos no obrigatrio. Podemos ter at 12 tipos de sobreposies para as vrias combinaes de parmetros. A seguir a lista de parmetros:

    Parmetro DescrioText Representa a mensagem que voc vai exibir. obrigatrio.Caption Determina a barra de ttulo que ser exibida.

    Buttons

    Controla os botes exibidos na caixa de mensagem. Seus valores podem ser:

    Exemplo de uso: MessageBoxButtons.AbortRetryIgnore - exibe os botes : Anular , Repetir e Ignorar

  • Icon

    Controla qual figura ser exibida junto a mensagem. O valores possveis so :

    Obs:Embora existam nove valores para os cones nem todo o sistema operacional fornece valores para todos.

    DefaultButton

    Define qual o boto padro que ir receber a ao do usurio.Para o caso de trs botes podemos escolher qual ser o boto padro : Ex:

    Options

    Controla a aparncia da caixa de mensagem. Temos opes para justificar o texto a direita , ser legvel da direita para a esquerda e permitir que a caixa de mensagem aparea apenas na rea principal. Os valores possveis so :

  • ADO.NET Os componentes ADO.NET foram desenhados para tratar o acesso aos dados e a manipulao dos mesmos. Os componentes que podemos chamar de pilares do ADO.NET so : DataSet e o provedor .NET que um conjunto de componentes que inclui os objetos Connection, Command, DataReader, and DataAdapter. O ADO.NET atual pode acessar dados de trs maneiras : OLE DB , SQL e ODBC (implementado mais recentemente). Cada objeto possui uma verso para cada uma das maneiras aqui mencionadas ; assim temos o objeto OleDataAdapter e SqlDataAdapter . Abaixo uma figura ilustrando isto:

    Todos os recursos ADO.NET so oferecidos atravs dos Namespaces (espaos de nomes) da biblioteca de nomes da classe .NET.

    System.Data - (Dados do sistema) - contm as classes fundamentais para gerenciar dados como DataSet e DataRelation .

    System.Data.Common - (Dados comuns de Sistema) - Possui classes bases que so herdadas por outras classes.

    System.Data.OleDb - Possui classes usadas para realizar conexo com o provedor OLE DB.

    System.Data.SqlClient - Possui classes para conexo com um banco de dados SQL Server via interface TDS (Tabular Data Stream)

    System.Data.SqlTypes - (Dados de sistema Tipos SQL) - inclui tipos adicionais de dados que no so fornecidos pelo .NET.

    Vamos comear pelo objeto Conncetion: ADO.NET - Usando objetos Connection Como voc j deve ter desconfiado , o objeto Connection tm a funo de gerar uma conexo com uma fonte de dados sendo portanto o objeto fundamental no acesso a

  • dados. Para estabelecer uma conexo com uma fonte de dados o objeto Connection usa a propriedade ConnectionString que a string de conexo que dever ser informada para que a conexo seja efetivamente aberta. Aps realizada a conexo com a fonte de dados podemos usar objetos para receber e enviar dados para a fonte de dados , dentre estes objetos podemos citar : Command e DataAdapter. A seguir vamos mostrar um diagrama com os componentes da arquitetura ADO.NET

    Como exemplo vamos criar um projeto que usa os objetos OleDBConnection e OleDbCommand para inserir um linha na tabela Clientes do banco de dados BiBlio.mdb. Abaixo esta a estrutura da tabela Clientes e uma visualizao dos seus dados atuais:

    Inicie um novo projeto no Visual Studio.NET com as seguintes caractersticas (sinta-se a vontade para alterar a seu gosto.)

  • 1. Project Types : Visual Basic Projects 2. Templates : Windows Application 3. Name : AdoNet_1 4. Location : c:\vbnet \Adonet_1

    No formulrio padro - form1.vb - insira uma caixa de texto - TextBox1 e um boto de comando - Button1 - conforme layout abaixo:

    Agora vamos incluir o cdigo que ir incluir o registro no banco de dados no evento Click do boto de comando conforme abaixo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim conn As New OleDbConnection() conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text Dim cmd As OleDbCommand = conn.CreateCommand cmd.CommandText = "Insert into Clientes Values (11,'Teste De Incluso','Rua Teste no 10','061-123456','10/11/1965')" Try conn.Open() cmd.ExecuteNonQuery() conn.Close() MsgBox("Registro incluido com sucesso !", MsgBoxStyle.Information, "Incluindo registros") Catch erro As Exception MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro") End TryEnd Sub Observe que destacamos as linhas de cdigo principais : conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.Text

    Cria a string de conexo usando OLE DB

    cmd.CommandText = "Insert into Clientes Values (11,'Teste De Incluso','Rua Teste no 10','061-123456','10/11/1965')"

    Inclui um registro na base de dados usando uma instruo SQL - Insert Into Values

    ADO.NET - Objetos Command Os objetos Command so usados para executar declaraes SQL e procedimentos armazenados (stored procedures). Os mtodos usados para realizar estas tarefas so :

  • ExecuteReader - executa declaraes SQL que retornam linhas de dados, tais como SELECT

    ExecuteNonQuery - executa declaraes SQL que no retornam dados , tais como INSERT , UPDATE , DELETE e SET

    ExecuteScalar - retorna um valor nico como resultado de uma funo agregada : SUM , AVG , COUNT , MAX E MIN.

    Para criar um comando voc j deve ter uma conexo criada . Assim para um banco de dados SQL Server devemos usar um objeto SqlCommand , j se usarmos provedores OLE DB deveremos usar o objeto OLEDCommand . Vejamos um exemplo de criao de um comando : Dim SQLString as String = "Select * from Clientes Where Codigo > 100"

    Dim cmd as New SqlCommand(SQLString, conexao )

    No exemplo acima usamos um objeto SQLCommand onde especificamos a conexo j existente que ser usada para selecionar registros de uma tabela clientes onde o cdigo seja maior que 100. Abaixo temos uma outra forma de obter o mesmo resultado: Dim SQLString as String = "Select * from Clientes Where Codigo > 100" Dim cmd As new SqlCommand

    cmd.CommandText = SQLStringcmd.Connection = conexao

    Para receber e manipular os dados retornados pelos mtodos acima precisamos usar os objetos DataReader : OledbDataReader e SqlDataReader. Objetos DataReader Os objetos DataReader uma das maneiras mais fceis para ler os dados retornados pelos objetos Command . Eles permitem acessar e percorrer os registros no modo de somente leitura e somente para frente - forward-only . No oferecem acesso desconectado e no permitem alterar ou atualizar a fonte de dados original sendo usado para obter rapidamente dados de apenas leitura. Apresenta poucos recursos mas seu desempenho muito melhor do que o oferecido pelos DataSet. As propriedades e mtodos mais usadas dos objetos DataReader so :

    1. FieldCount - informa o nmero de colunas da linha de dados atual 2. IsClosed - Indica se o objeto DataReader esta fechado. 3. RecordsAffected - especifica o nmero de linhas alteradas , excludas ou

    includas na execuo de uma declarao SQL 4. Item (n) - obtm o valor da n-sima coluna no seu formato nativo. 5. Close - Mtodo que fecha o objeto 6. GetName - Mtodo que retorna o nome da n-sima coluna. 7. Read - mtodo que permite ao DataReader avanar para o prximo registro 8. IsDbNull - mtodo que informa se a n-sima coluna possui um valor nulo.

    Para criar um objeto DataReader usamos o mtodo ExecuteReader de um objeto Command . Abaixo um exemplo simples de como fazer isto : Dim leitor As SQLDataReader = cmd.ExecuteReader()

  • Vamos mostrar um exemplo completo usando o DataReader para ler a tabela clientes do banco de dados BiBlio.mdb. Os dados sero exibidos em dois controles : Listbox e ListView. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim conn As New OleDbConnection()conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TextBox1.TextDim cmd As OleDbCommand = conn.CreateCommand cmd.CommandText = "Select * from Clientes"conn.Open() Dim leitor As OleDbDataReader = cmd.ExecuteReader()Try While leitor.Read() Dim i As Integer For i = 0 To leitor.FieldCount - 1 ListBox1.Items.Add(leitor.Item(i)) Next End While leitor.Close() conn.Close()Catch erro As Exception MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")End Try End Sub O cdigo acima esta associado ao evento Click do boto de comando - Button1 - e preenche o ListBox - listbox1 - com os dados da tabela Clientes. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim conn As New OleDbConnectio