## Capítulo 2. Sua Primeira Aplicação VB .NET

NESTE CAPÍTULO

- A Página de Início

- Criando um Novo Projeto

- Criando Sua Primeira Aplicação VB .NET

- Melhorias Para Aplicações Windows

- Sumário

È chegada o hora de pular dentro e iniciar o trabalho com o VB .NET. Primeiramente, você precisa aprender um pouquinho sobre o novo IDE. O novo IDE do VB .NET pode parecer algo familiar a você, mas há algumas mudanças significativas que o fazem um ambiente mais útil. Contudo, estas mudanças pode ser frustrantes para desenvolvedores experientes, porque muitos dos atalhos de teclado mudaram, janelas têm nomes diferentes e as ferramentas de depuração funcionam de modo diferente. O VB .NET é parte do Visual Studio .NET ( ou VS .NET), que finalmente reúne todas as linguagens de desenvolvimento num só lugar: VB .NET, C++ .NET e C#. Você pode até mesmo criar uma única solução contendo múltiplos projetos escritos individualmente em diferentes linguagens.

### A Página de Início

A primeira vez que você inicia o Visual Studio .NET, você é levado a uma tela que permite que você configure o IDE. Esta tela é a página My Profile, discutida mais adiante neste capítulo. Após você visitar pela primeira vez a página My Profile, todas as inicializações subsequentes do Visual Studio .NET iniciarão com a página de início (start page), como mostra a Figura 2.1. A página de início contém um número de seções conforme indicado pelos links ao longo do lado esquerdo. Estas seções são:

- Get Started — Esta opção permite que você abra um dos projetos recentes ou crie um novo projeto. Uns poucos projetos recentes são listados na área Get Started mostrada na Figura 2.1. À medida que você criar projetos no VB .NET, esta área irá exibir os quatro projetos mais recentemente abertos. Esta área também contém links para abrir projetos existentes e criar um novo projeto.

- What's New — Esta opção cobre os recursos novos de linguagem no Visual Studio .NET, incluindo cada linguagem individualmente e o ambiente do Visual Studio .NET. Há links para tópicos nos arquivos de ajuda sobre os novos recursos para as linguagens do VS .NET, o .NET SDK e um link para conferir atualizações do VS .NET.

- Online Community — Esta área fornece links para os grupos de discussão da Microsoft. Estes são grupos acessíveis com qualquer programa de leitura de newsgroups, mas eles são servidos pelo servidor de news da Microsoft (`msnews.microsoft.com`) e não servidores normais de news da Usenet.

- Headlines — Fornece um local com links para novidades sobre o .NET. Esta página inclui um link para o MSDN Online, uma seção para artigos técnicos, uma seção para o Knowledge Base e vários outros recursos.

- Search Online— Pesquisa a biblioteca online do MSDN

- Downloads— Lhe dá acesso a vários downloads. Downloads que podem incluir novas ferramentas, tais como service packs e exemplos de código. Os downloads também podem incluir novas documentações.

- Web Hosting— Permite que você se conecte diretamente a serviços que oferecem hospedagem para os seus .NET Web Services ou Aplicações .NET Web. Com um comando, você pode publicar suas aplicações .NET ou serviços para estas companhias de hospedagem. Ao menos uma, a Brinkster, oferece hospedagem grátis e com isto você pode testar sua aplicação.

- My Profile— Esta tela permite-lhe escolher o layout geral do Visual Studio .NET. Você pode configurar os atalhos de teclado para o mesmo esquema de versões prévias do Visual Studio, tais como a versão 6. Você pode também configurar o layout de janela para parecer com as versões anteriores de projetos do Visual Studio e você pode filtrar o help automaticamente usando o seu perfil. Ao longo deste curso, eu assumirei que o perfil é aquele estabelecido pelo Visual Studio e que todas as demais configurações são deixadas nos seus valores padrões.

##### Figura 2.1. A Página Inicial do Visual Studio

Nota

A página inicial é em HTML e provavelmente irá mudar quando o VS .NET for lançado.

A ajuda está agora mais intimamente integrada ao Visual Studio. Para ver isto, clique no link What's New na página inicial. Note que, quando você faz isto, uma série de links para a documentação online são carregados na mesma janela da página inicial. Estes links o levam para informações de última hora se você tiver uma conexão com a Interntet aberta. Clique em um destes links para ver o conteúdo ser exibido dentro da janela do IDE. Como você verá mais tarde, é possível até mesmo ter ajuda rodando continuamente enquanto você trabalha, pesquisando por tópicos associados ao que quer que você esteja manipulando no momento.

##### Figura 2.2. A ajuda sendo exibida dentro da janela do IDE (é possível também exibir em janela separada).

### Criando um Novo Projeto Volte para a página inicial clicando no botão de navegação Back da barra de ferramentas e, na página Get Started, clique no link New Project. Fazendo isto, será aberta a caixa de diálogo New Project mostrada na Figura 2.3. Note que há diferentes linguagens que você pode usar para criar aplicações em Visual Studio .NET. Este curso irá focar apenas os projetos em Visual Basic. Figura 2.3. A caixa de diálogo New Project Se você examinar os tipos de projetos do Visual Basic, você verá que muitos deles são diferentes dos que você costuma ver no Visual Basic 6. Alguns dos principais tipos de projetos são: Windows Application— Este é um executável padrão na terminologina do VB 6. É a forma de criar aplicações Windows com formulários e controles. Isto é o mais próximo do VB 6 que você chegará com o VB .NET. Class Library— Este tipo de projeto permite-lhe criar classes que serão usadas em outras aplicações. Pense nisto como se fossem componentes COM que você tem criado com o VB 6 chamados ActiveX DLL ou ActiveX EXE . Windows Control Library— Este tipo de projeto é para criar aquilo que costumava ser chamado de ActiveX Controls. Este tipo de projeto lhe permite criar novos controles a serem usados em aplicações Windows. ASP.NET Web Application— Adeus Visual Interdev e linguagens interpretadas para Active Server Pages. O Visual Basic .NET tem os projetos Web Application, que usam ASP .NET para criar aplicações Web dinâmicas. Estes projetos permitem-lhe criar arquivos de código para HTML, ASP .NET e VB .NET. Você agora irá codificar suas aplicações Web usando um poderoso modelo orientado a eventos ao invés do modelo request/response. Naturalmente, aplicações Web ainda usam o modelo request/response, mas você escreve código do mesmo modo como faz para aplicações Windows, usando um modelo orientado a eventos. ASP .NET Web Service — Se você tem usado o VB 6 para criar componentes COM e os tornado disponíveis por HTTP com SOAP, você compreende o conceito de Web Services. Projetos de Web Services são componentes que você torna disponíveis a outras aplicações via Web; o protocolo usado é HTTP e não DCOM, e você passa requisições e recebe respostas por trás da cena usando XML. Algumas das maiores vantagens dos Web Services são que eles são completamente baseados em padrões e independentes de plataforma. Diferentes do DCOM, que foi atado firmemente ao COM, e portanto apenas ao Windows, os projetos Web Services podem ser usados em qualquer plataforma que suporte .NET e podem ser chamados por qualquer aplicação usando protocolo HTTP. Web Control Library— Como ocorre com os projetos Web Services, não há um correspondente exato no VB6 para os projetos Web Control Library. Graças aos novos projetos Web Application doVB .NET, você pode adicionar controles em páginas Web do mesmo modo como você faria em aplicações Windows padrão, mas o VB .NET os torna controles HTML em tempo de execução. Você pode criar seus próprios controles para serem usados em aplicações Web. Console Application— Muitas das ferramentas administrativas do Windows ainda são aplicações console (ou de linha de comando ou DOS). Anteriormente você não tinha uma boa maneira de criar aplicações console no VB, e tinha que usar o C++. Agora, aplicações console são suportadas nativamente pelo VB .NET. Windows Service— Como com as aplicações console, não havia uma boa forma de criar serviços Windows em versões anteriores do VB. Serviços Windows, naturalmente, são programas executados em segundo plano do Windows e podem iniciar-se automaticamente quando a máquina é iniciada, mesmo se ninguém se logar. Serviços Windows não costumam ter interface com o usuário, ao contrário, gravam qualquer informação para logs de eventos. Por serem tipicamente aplicações que rodam por longos períodos, certifique-se de incluir bons tratamentos de erro. Estes são os tipos básicos de aplicações que você cria. Você pode também criar um projeto vazio ( para aplicações Windows, class libraries e serviços) ou um projeto Web vazio ( para aplicações Web). Uma opção final: New Project in Existing Folder; irá criar um novo projeto vazio em uma pasta que já contém um ou mais projetos. ### Examinando o IDE Se você ainda está na janela de New Project, escolha criar uma Windows Application. Nomeie-a LearningVB e clique no botão OK. Após algum tempo um novo projeto se abrirá. Note que isto fez com que fosse adicionada uma nova tab na janela principal com o título Form1.vb [Design]. Nesta nova tab, você agora tem o que parece ser um formulário vazio. Isto é normalmente chamado de Form Designer. De fato, há vários tipos de designers que podem ser carregados na área da janela principal. Até aqui, programadores de VB devem estar se sentindo bem em casa. Uma diferença que apareceu, talvez sem que você tenha notado, é que os arquivos criados já são salvos na sua máquina. No VB, você poderia criar um projeto, escrever algum código rapidamente, e então sair sem salvar, e nada ficava armazenado no seu computador. No VB .NET, contudo, os arquivos são salvos na criação, assim cada projeto que você criar armazenará alguma coisa no seu disco, mesmo que você nunca chegue a salvar nada. Os desenvolvedores com Visual Interdev estão acostumados a isto, mas desenvolvedores só em VB irão ver isto como uma mudança. Se você olhar para o lado direito do IDE, você verã uma janela chamada de Solution Explorer. Ela funciona como o Project Explorer do VB6, exibindo-lhe os projetos e arquivos que você tem na solução presente (o que em VB6 é chamado de grupo). O Solution Explorer lista o nome da solução, o nome do projeto e todos os formulários e módulos. Neste momento só há um formulário chamado Form1.vb. Em adição, a janela terá um arquivo chamado AssemblyInfo.VB, que é parte da meta-informação que será compilada num neste assembly. Você verá um novo nó chamado References na lista.Se você expandir o nó References, você verá todas as referências que já estão disponíveis para o seu projeto quando você inicia. Você pode ver o Solution Explorer na Figura 2.4. Por enquanto, não se preocupe muito com as referências. Figura 2.4. A janela Solution Explorer. Uma segunda tab, entitulada Class View, existe na base da janela Solution Explorer.Se você clicar na tab Class View, você verá o projeto LearningVB listado.Se você expandir o nó, você irá ver os namespaces para este projeto listados. Acontece de haver apenas um namespace neste momento e, por padrão, ele tem o mesmo nome que o projeto. Expanda o namespace LearningVB e você verá que só o Form1 está listado abaixo dele. Expanda o Form1 e você irá ver alguns dos métodos do formulário bem como um nó para "Bases and Interfaces". Se você expandir o nó Bases and Interfaces, e o nó Form abaixo dele, você verá uma longa lista de propriedades, métodos e eventos disponíveis para você no formulário. Você pode ver uma pequena parte desta lista na Figura 2.5. Novamente, não se preocupe com isto por enquanto. Só entenda que isto é seguramente diferente de tudo o que você viu no Visual Basic 6. Figura 2.5. A nova janela Class View Se você quer saber mais sobre o que uma destas propriedades ou métodos pode fazer por você, é fácil localizar no Object Browser. Por exemplo, role para baixo a lista Bases and Implemented Interfaces atá você localizar o evento Load. Dê um clique com o botão direito nele e escolha Browse Definition. Você verá que o Object Browser aparece como uma tab na área da janela principal, e que você está na definição do evento Load. Você pode ver que Load retorna um System.EventHandler. A Figura 2.6 mostra como isto aparece no IDE. Por ser apenas uma outra tab, o Object Browser não precisa ser fechado. Contudo, se você quiser fechá-lo, o X que você clica deve clicar está no canto superior direito da janela de designer, não o X para tudo do Visual Studio .NET. Figura 2.6. O Object Browser agora é uma tab na área da janela principal. Abaixo da janela Solution Explorer/ClassView está algo que se tornará muito familiar a você, a janela de propriedades (Properties).Se você fechar o Object Browser e voltar para a tab Form1.vb [Designer], você verá as propriedades para o Form1. Você poderá ter de clicar no formulário para ele ganhar o foco. Após o formulário ganhar o foco, você verá as propriedades do formulário. Muitas destas propriedades lhe parecerão muito familiares, embora hajam algumas novas. O que são estas novas propriedades e o que elas podem será examinado mais adiante neste capítulo. Nota Por default, a janela de propriedades é ordenada por categoria ao invés de alfabeticamente. Portanto, pode ser difícil encontrar certas propriedades. Na barra de ferramentas para a janela de propriedades, existem botões que lhe permitem alternar a ordenação de categorizada para alfabética. Na mesma área da janela de propriedades há uma tab entitulada Dynamic Help. Este é um recurso novo do Visual Studio .NET que lhe permite ter atualizações constantes do help enquanto você trabalha. Ele monitora o que você está fazendo no IDE e fornece uma lista dos tópicos de ajuda para a sua atividade presente. Por exemplo, com apenas o formulário aberto e ativo, clique na tab Dynamic Help. Você terá uma lista de tópicos de ajuda associados com o designer de formulários como adicionar controles a um formulário e tópicos similares. A Figura 2.7 mostra como esta lista será exibida. Sinta-se livre para clicar em várias janelas do IDE e ver a ajuda dinâmica mudar. Apenas observe que o recurso de ajuda dinâmica consome recursos. Em computadores poderosos, isto pode não fazer diferença, mas poderá ser um problema em máquinas lentas e com pouca memória. Figura 2.7. A janela Dynamic Help. Ao longo do lado esquerdo do IDE estão duas tabs laterais. Você vê apenas um título de cada vez, assim uma irá aparecer enquanto a outra ficar aparece como um botão. A primeira tab/botão é para o Server Explorer e a segunda é para a caixa de ferramentas (Toolbox). O Server Explorer é um novo recurso do IDE. Ele permite serviços procurar por serviços descobríveis em vários servidores. Por exemplo, se você quiser localizar uma máquina que esteja rodando o Microsoft SQL Server, haverá um nó SQL Server no servidor que tiver o serviço rodando. Na Figura 2.8, você pode ver que eu tenho um servidor registrado para o meu Server Explorer: culaptop. Este servidor tem o SQL Server e você pode ver uma lista dos bancos de dados. Dentro do Server Explorer, você pode executar ações que você costumava realizar com a janela DataView . Você pode ver os dados em uma tabela, você pode excluir ou criar tabelas, você pode criar, excluir e editar stored procedures e todas as outras atividades que você realizava com a janela DataView no VB6. Se você já trabalhou muito com o Visual Interdev, estas ferramentas lhe serão ainda mais fáceis de usar. Figura 2.8. A nova janela Server Explorer. Você também pode usar o Server Explorer para localizar e se conectar com filas de mensagens, monitorar outra máquina com contadores de performance e localizar serviços Web em outras máquinas. O Server Explorer é uma mão na roda e com muitas funções administrativas que você pode usar para fazer tudo num só lugar. A segunda tab lateral é a Toolbox. A Toolbox é exatamente o que o seu nome diz. É onde você localiza os controles que você quer adicionar a um formulário. Note, contudo, que esta Toolbox é um pouco diferente da Toolbox do VB6. De fato, ela se parece mais com a Toolbox do Visual Interdev. A Toobox é dividida em tabs horizontais. A Figura 2.9 exibe a tab Windows Forms aberta, mas há também as tabs Data, Components, Clipboard Ring e General. Não se preocupe muito com estas outras tabs por enquanto. Figura 2.9. A Toobox incrementada.

### Criando Sua Primeira Aplicação VB .NET

Você tem um projeto aberto com um formulário nele. Até aqui, você nada fez com ele, mas agora você irá criar a obrigatória aplicação Olá Mundo. Eu me recordo de quando a Microsoft estava correndo o mundo e mostrando como poderia ser fácil criar uma aplicação do tipo Olá Mundo em VB simplesmente teclando uma linha de código. Bem, ainda continua igualmente fácil, mas as coisas certamente se apresentam diferentes agora.

Certifique-se de que o designer de formulários é a tab ativa na área de trabalho e abra a Toolbox. Clique e arraste um botão sobre o formulário. Posicione-o onde você quiser. Até aqui é tudo como no VB6. Agora, dê um duplo clique no botão.

Um duplo clique sobre o botão causa a abertura da janela de código, exatamente como no VB6. Contudo, no VB .NET, o código é adicionado na forma de uma tab na área de trabalho. A nova tab é intitulada Form1.vb, e tem um asterisco em seguida indicando que ela não foi salva. Você tem bastante código nesta janela, e é código que você nunca viu antes. Parte do código é ocultada dos seus olhos, isto devido ao fato de que, no Visual Studio .NET, o editor de código permite que você oculte ou expanda blocos de código. Se você expandir o código gerado na seção Windows Form Designer, verá um bocado de código. Na verdade, antes que você digite qualquer código, já terá o código mostrado na Figura 2.10. Note que eu ativei a numeração de linhas apenas para referenciar as linhas com mais facilidade. Se você também quiser ativar a numeração de linhas, vá ao menu Tools, Options. Expanda o nó Text Editor e escolha Basic. Cheque a checkbox Line Numbers.

##### Figura 2.10. A janela de código exibe uma considerável quantidade de código antes mesmo de você começar a digitar.

A primeira linha de código mostra que este formulário, Form1, é na verdade apenas uma classe. Esta é uma das maiores mudanças do VB .NET. Formulários são verdadeiras classes. Por quê? Por que formulários são realmente apenas classes e têm sido assim sempre. Você pode nunca ter pensado neles desta forma antes, mas um formulário é apenas mais uma classe. Quando um formulário é exibido, você apenas instanciou uma classe.

A linha seguinte é uma declaração Inherits. Qualquer formulário do Windows que você cria apenas herda da classe base Form. Você está chamando uma classe em um dos namespaces .NET System, neste caso, você está chamando a classe Form no namespace System.Windows.Forms. É esta classe que lhe dá a funcionalidade básica dos formulários, tais como os métodos e eventos que você acessará em seu código. A declaração Inherits é a sua primeira indicação de herança real no VB .NET. Você pode herdar desta classe base e então estendê-la se assim o quiser.

O código localizado dentro da região Windows Form Designer é mostrado na Listagem 2.1.

##### Listagem 2.1 Código Gerado para Você pelo Designer de Formulários Windows

    #Region " Windows Form Designer generated code "

        Public Sub New()
            MyBase.New()

            'This call is required by the Windows Form Designer.
            InitializeComponent()

            'Add any initialization after the InitializeComponent() call

        End Sub

        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
       Friend WithEvents Button1 As System.Windows.Forms.Button

        'Required by the Windows Form Designer
        Private components As System.ComponentModel.Container

        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub
        InitializeComponent()
          Me.Button1 = New System.Windows.Forms.Button()
          Me.SuspendLayout()
          '
          'Button1
          '
          Me.Button1.Location = New System.Drawing.Point(64, 56)
          Me.Button1.Name = "Button1"
          Me.Button1.TabIndex = 0
          Me.Button1.Text = "Button1"
          '
          'Form1
          '
          Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
          Me.ClientSize = New System.Drawing.Size(292, 273)
          Me.Controls.AddRange(New System.Windows.Forms.Control() { Me.Button1} )
          Me.Name = "Form1"
          Me.Text = "Form1"
          Me.ResumeLayout(False)

       End Sub

    #End Region

A próxima parte dentro da classe é um Sub público chamado New, localizado dentro da região de código gerado automaticamente. Note que ele chama um Sub nomeado InitializeComponent. A rotina InitializeComponent é criada para você pelo VS .NET. A nova rotina é similar ao procedimento de evento Form_Load que você está acostumado a ver no VB6. Note que você pode adicionar algum código seu após a chamada a InitializeComponent .

Após o sub New, há o sub Dispose, parecido com o evento Form_Unload do VB6. Este é o lugar de limpeza de tudo que você pode ter feito. Não se preocupe sobre as palavras Overloads e Overrides por enquanto, elas serão explicadas quando você aprender mais sobre herança.

Como você pode ver, a rotina InitializeComponent está neste bloco e é ela que configura os controles no formulário. Note que o botão tem propriedades atribuídas, tais como localização e tamanho, e então é adicionado a uma coleção de controles.

Finalmente, abaixo desta região de código, está a rotina para tratar o evento click do botão. Isto também se mostra diferente do que você tem visto anteriormente. Na verdade, se você inicia um novo projeto no VB6, adiciona um botão ao formulário e dá um duplo clique sobre o botão, seu projeto inteiro mostra apenas este código:

    Private Sub Command1_Click()

    End Sub

Contudo, no VB .NET, você verá um bocado mais de código. Na verdade, o evento Click não é tratado antes da linha 57, ao menos neste exemplo. A declaração do procedimento de evento também é completamente diferente. No VB .NET, o procedimento de evento parece-se com isto:

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

    End Sub

Novamente, não se preocupe com todas as mudanças por enquanto. Agora, digite a seguinte linha de código:

MsgBox "Olá, Mundo!"

Quando você sair desta linha, você verá que o VB .NET automaticamente adiciona parênteses em torno do argumento, deixando você com isto:

MsgBox("Olá, Mundo!")

Esta é uma das primeiras mudanças fundamentais da linguagem.. Subs e funções requerem parênteses entorno dos argumentos. O comando MsgBox é uma função, mas no VB6, você não precisava adicionar parênteses entorno de um parâmetro se você estivesse ignorando o valor de retorno. No VB .NET, você precisa sempre de parênteses, assim sendo acostume-se a adicioná-los ou ao menos acostume-se a ver o VB .NET adicioná-los para você.

Agora é hora de rodar esta demonstração não muito excitante e ver como ela funciona. Você pode clicar no botão Start na barra de ferramentas (isto deve lhe ser familiar) ou você pode ir ao menu Debug e escolher Start.

O Form1 será carregado. Clique no botão e você deverá receber a caixa de mensagem com o texto "Olá, Mundo!". Na Figura 2.11, você notará que o título da caixa de mensagem é igual ao nome do projeto, do mesmo modo que era no VB6. Feche a aplicação e retorne ao IDE.

##### Figura 2.11. A aplicação Olá Mundo sendo executada.

Note que uma nova janela está aparecendo na base da tela, uma janela de Output está aberta agora. A Figura 2.12, mostra esta janela. A janela de Output tem uma listbox estilo drop-down que pode exibir diferentes informações. Atualmente, ela lhe mostra todas as mensagens de depuração. Você não adicionou nenhum debug.print no seu código, mas certas ações do compilador introduzem automaticamente comentários na janela de Debug.

##### Figura 2.12. A nova janela de Debug.

Antes de avançar mais, você pode querer mudar o título da caixa de mensagem. Retorne à única linha de código que você escreveu até aqui e modifique-a para parecer-se com isto:

    MsgBox("Olá, Mundo", , "Minha primeira aplicação VB .NET")

Agora que você adicionou um título à caixa de mensagem, rode o projeto novamente e o título da sua caixa de mensagem será "Minha primeira aplicação VB .NET". Se você pensa que ela não pode melhorar além disto, segure firme.

### Melhorias para Aplicações Windows

O Visual Studio .NET acrescentou uma variedade de recursos ao VB .NET para tornar o IDE mais poderoso e melhorar a funcionalidade de formulários Windows. Há melhorias no suporte a criação de menus, controles que automaticamente redimensionam baseados no texto a ser exibido. melhor posicionamento de controles para janelas redimensionadas e um melhorado mecanismo de atribuição da ordem de tabulação.

### Ancorando Controles nas Margens do Formulário

Quantas vezes você criou formulários e configurou a propriedade BorderStyle para fixa de modo a impedir que os usuários o redimensionassem? Se você posicionou uma série de botões na base do formulário, você não quer que as pessoas o redimensionem e, subitamente, a linha de base dos botões fique no meio do formulário.

O VB .NET permite que você ancore os controles em um ou mais lados do formulário. Isto permite que um controle se mova conforme o formulário seja redimensionado de forma a ficar no lugar apropriado.

Voltando ao Form1, remova o código inserido no procedimento de evento Button1_Click. Faça o formulário ficar um pouco maior e mova o botão em direção ao canto inferior direito. Agora, adicione um TextBox ao formulário. Mude a propriedade Multiline do TextBox para True e redimensione o TextBox de modo a preencher a maior parte do formulário, exceto a porção que agora contém o botão. Seu formulário deve, agora, assemelhar-se ao que mostra a Figura 2.15.

##### Figura 2.15. O formulário como mostrado em tempo de design.

Rode o projeto. Após a janela ser carregada, redimensione a movendo o canto inferior direito para baixo e para a direita. Você terá algo que se parece com o que mostra a Figura 2.16.

##### Figura 2.16. O formulário em tempo de execução mostrando o que ocorre após o redimensionamento.

Naturalmente, isto parece um bocado estranho e é exatamente o que você está acostumado a ver que acontece no VB6. Sua solução em VB6, a menos que você use um componente extra, é escrever um bocado de código que é executado quando o evento Resize do formulário é disparado. Você usa este código para mover o botão e redimensionar o TextBox. O VB .NET tem uma forma melhor de lidar com isto, portanto, pare a aplicação e retorne ao IDE.

Certifique-se de que você está na tab Form1.vb[Design] e clique no Button1. Na janela de propriedades, role para baixo até encontrar a propriedade Anchor. Quando você abrir a list, você verá uma estranha caixa que mostra algo cinza no meio e quatro retângulos ao seu redor. Por default, os retângulos da esquerda e do topo são escurecidos, enquanto os retângulos da direita e da base estão vazios. Os retângulos escurecidos indicam que, neste momento, o botão está ancorado no topo e à esquerda do formulário. Quando você redimensiona o formulário, o botão permanecerá à mesma distância do topo e da esquerda do formulário. Isto não é o que você quer, portanto, clique nos retângulos da esquerda e do topo para limpá-los, e clique nos retângulos da direita e da base para escurecê-los. Quando você terminar, a propriedade Anchor deverá mostrar-se como na Figura 2.17. Após você fechar a lista, a propriedade Anchor deverá mostrar Botton, Right.

##### Figura 2.17. A ferramenta da propriedade `Anchor`.

Em seguida, clique no TextBox e escolha a propriedade Anchor. Clique nos retângulos da base e da direita, mas deixe os retângulos da esquerda e do topo como já estão. Agora, o TextBox está preso a todas as bordas, e permanecerá à mesma distância delas. A propriedade Anchor para o TextBox deverá mostrar agora Top, Bottom, Left, Right.

Rode o projeto novamente. Após o formulário se abrir, redimensione-o. Note que o botão agora permanece no canto direito inferior, e o TextBox automaticamente se redimensionou com o formulário. Você pode ver este comportamento na figura 2.18. O redimensionamento e o movimento foram obtidos sem escrever uma linha de código.

##### Figura 2.18. O formulário mostrando como os controles podem ser redimensionados e movidos conforme o formulário é redimensionado.

#### Menus Facilitados

Se você odiava a criação de menus em versões anteriores do VB, você não está sozinho.O editor de menus do VB nunca ganhou nenhum prêmio de facilidade de uso nem por ser amigável ao usuário. O novo editor de menus do VB .NET pode até tornar divertida a criação de menus.

Usando o mesmo formulário do exemplo anterior, vá à caixa de ferramentas e dê um duplo clique no controle MainMenu. O controle MainMenu é adicionado à área abaixo do formulário, chamada de Componente Tray, que você verá em maiores detalhes mais adiante. Se você der um clique simples no controle MainMenu na Component Tray, você verá uma barra de menus adicionada ao formulário, que simplesmente desloca para baixo o TextBox. O menu mostra um item que diz Type Here, conforme mostrado na Figura 2.19.

##### Figura 2.19. O novo Editor de Menus em ação.

Dê um clique na caixa que diz Type Here (Digite aqui) e digite &File. Isto irá criar uma nova caixa Type Here á direita e uma nova caixa Type Here abaixo. Clique na Type Here abaixo da palavra &File e digite &Open. Do mesmo modo que em versões anteriores do VB, o "&" é usado para significar uma seleção Alt+Tecla. Digitando &Open cria uma nova caixa Type Here à direita e uma nova abaixo. Como você pode ver, você está criando graficamente um menu.

Clique na caixa abaixo de Open e digite &Close.

Você pode clicar na caixa Type Here abaixo do menu File e escolher adicionar mais um menu de nível máximo. Por exemplo, você poderia adicionar &Edit à direita do menu File. Agora, o menu Edit ganha entradas em branco e você pode adicionar itens copiando e colando.

Clique no menu Open que você acaba de criar. Se você olhar na janela de propriedades, você verá que o nome real do objeto é MenuItem2. Você pode mudar isto se quiser, mas não se preocupe com isto por enquanto. Clique na lista para a propriedade Shortcut. Role a lista até encontrar a opção Ctrl+O. A propriedade ShowShortcut é configurada para True por default, mas você não verá o atalho em tempo de design. Rode a aplicação. A Figura 2.20 mostra lhe o que você deveria ver. Note que o sublinhado das letras (gerado pelo &) não aparece a menos que você pressione a tecla Alt.

##### Figura 2.20. O novo menu sendo exibido em tempo de execução.

#### Configurando a Ordem de Tabulação

Se você detestava criar menus em versões prévias do VB, é bem provável que você também odiava a configuração da ordem de tabulação, especialmente em formulários complexos. Você tinha que clicar em cada controle, um de cada vez, e certificar-se de que a propriedade TabIndex estivesse correta. Agora, usando o formulário com que você tem trabalhado, remova o textbox. Deixe o Button1 no canto direito do formulário.

Adicione três novos botões ao formulário. Posicione-os de tal forma que o Button1 seja o último na série. Pode até misturá-los, se preferir. Se você der uma olhada na Figura 2.21, você verá que os botões foram posicionados de tal forma que você iria querer que a ordem de tabulação fosse Button2, Button4, Button3 e Button1. Se você rodar o projeto desta forma, contudo, a ordem ainda será Button1, Button2, Button3 e Button4.

##### Figura 2.21. O formulário com botões na ordem errada.

Para configurar a ordem de tabulação, clique no menu View e escolha Tab Order. Você terá, agora, pequenos números em cada controle que podem receber o foco como mostrado na Figura 2.22. Para modificar a ordem de tabulação, simplesmente clique nos controles na ordem que você quer que eles recebam o foco. Neste exemplo, você apenas clica no Button2, Button4, Button3 e Button1, nesta ordem, e a ordem de tabulação é criada para você conforme evidenciado pelo número no canto alto esquerdo de cada botão.

##### Figura 2.22. A nova forma de configurar a ordem de tabulação.

Você pode escolher View, Tab Order novamente e desativar a exibição da ordem de tabulação. Rode o projeto e verifique a nova ordem de tabulação.

#### Controles Line e Shape

Se você examinar a caixa de ferramentas, poderá estranhar a ausência dos controles Line e Shape. Eles se foram. Estes controles se foram, mas você tem uma alternativa.

A Microsoft os removeu porque eles eram controles sem janela correspondente, isto é, eles não tinham uma propriedade hWnd, mas eram desenhados diretamente sobre o formulário. Nos novos formulários do VB .NET, todos os controles precisam ser janelas e você não pode mais ter controles transparentes.

Agora que você recebeu a explicação técnica, o que você pode fazer sobre isto? A forma fácil de forjar uma linha é usar um label. Ative a borda e então atribua a altura (ou largura) para 1. Isto faz com que o label se pareça com uma linha e funciona bem. Para formas mais complexas, a Microsoft recomenda que você use os objetos GDI+, que são muito poderosos. Os objetos GDI+ estão no namespace System.Drawing, e serão examinados brevemente no capítulo 3, "Principais Mudanças do VB .NET".

#### Opacidade de Formulário

Os formulários, agora, têm a propriedade Opacity. É um recurso necessário? Provavelmente não, mas pode ser usado para alguns propósitos bastante úteis. Por exemplo, você pode usá-la para fazer os formulários desaparecerem e reaparecerem, e torná-los translucentes enquanto estão sendo arrastados.

No formulário Form, que você tem trabalhado até aqui, localize sua propriedade Opacity e modifique-a para 50%. Agora, rode o projeto e você notará que o formulário está quase todo transparente. O formulário ainda funciona normalmente. Você pode clicar e arrastar o formulário, pressionar os botões. Ele funciona bem, mas está translúcido no momento. Feche o projeto e você poderá adicionar algum código para tirar vantagem deste nova propriedade.

Vá à caixa de ferramentas e adicione um timer ao seu formulário. Diferentemente do VB6, o timer não aparece de fato no formulário, mas na Component Tray para o formulário. Clique no timer nesta janela e atribua True à propriedade Enabled do timer. O intervalo de 100 está bom. Agora, clique na tab Form1.vb para acessar o código. Na rotina Sub New, adicione a seguinte linha após o comentário "Add any initialization ..." :

    Me.Opacity = 0

Isto tão somente atribui a opacidade 0, o que significa que o formulário estará completamente invisível quando carregado.

Em seguida, use as combos Class Name e Method Name no topo da janela de código e escolha o evento Elapsed do controle Timer1. Isto faz com que seja adicionado um procedimento de evento para tratar o evento Timer1_Elapsed. Dentro deste procedimento de evento, entre com o seguinte código:

    Me.Opacity = Me.Opacity + 0.01
    If Me.Opacity >= 1 Then
       Timer1.Enabled = False
       Beep()
    End If

Este código simplesmente incrementa a opacidade em .01 a cada vez que o evento Elapsed ocorre. Quando finalmente ele atinge 1 (100%), o timer se desliga atribuindo False à sua propriedade Enabled e o bip é chamado para soar um alarme tal que você saiba que ele terminou.

Se você está todo confuso com o código, a listagem 2.2 mostra como a listagem completa ficará (com o código gerado para Windows Form Designer oculto).

##### Listagem 2.2 Sua Primeira Aplicação VB .NET com Todo o Código Discutido Até Aqui.

    Public Class Form1
        Inherits System.Windows.Forms.Form

    #Region " Windows Form Designer generated code "

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

       End Sub

       Private Sub Timer1_Elapsed(ByVal Sender As Object, _
        ByVal e As System.Timers.ElapsedEventArgs)Handles Timer1.Elapsed
          Me.Opacity = Me.Opacity + 0.01
          If Me.Opacity >= 1 Then
             timer1().Enabled = False
             Beep()
          End If
       End Sub
    End Class

Rode o projeto. Você deverá ver o seu formulário surgir aos poucos à medida que a opacidade lentamente é aumentada. Você ouvirá um bip quando a formulário estiver plenamente opaco.

### Sumário

Este capítulo procurou introduzi-lo rapidamente no IDE do VB .NET. Você criou seu primeiro programa em VB .NET e viu alguns dos novos recursos apresentados no IDE. Agora é mais fácil fazer os controles manterem suas posições mesmo quando os formulários são redimensionados. A ajuda é mais rapidamente acessível. O Server Explorer torna mais fácil localizar e usar recursos disponíveis na corporação. Novos tipos de projetos abrem um novo mundo para os desenvolvedores VB .NET.

Em adição a estas mudanças, há também algumas mudanças fundamentais na linguagem. Algumas das quais foram mencionadas neste capítulo e, se você olhou o código, deve ter visto ainda outras. O próximo capítulo é dedicado a apresentar algumas das mais importantes mudanças na linguagem.