56
Maria Aparecida dos Reis França dos Santos Introdução Vb.Net: interface gráfica, funções e arrays Capítulo 2 Quando desenvolvemos uma aplicação que faz uso de uma interface gráfica, sentimos a necessidade de manipular as imagens em um projeto. E muitas vezes, ao desenvolver uma aplicação, devido ao grande número de valores disponíveis para comparação, necessitamos trabalhar de uma forma que se obtenha melhor desempenho. Neste capítulo, vamos trabalhar com imagens e manipular os dados em vetores e matrizes. E para melhor interface com o usuário, também apresentaremos duas formas de trabalhar com o menu. Na atualidade, a web proporciona o compartilhamento de notícias, de entretenimento, dentre outras coisas e, entre elas, do conhecimento. É comum encontrarmos códigos fornecidos por usuários mais experientes e até mesmo códigos fornecidos pelo fabricante do software, a fim de agilizar o processo de desenvolvimento. Por fim, vamos também conhecer o acesso à Universal Serial Bus (USB) para que você possa personalizá-lo de acordo com suas necessidades.

Linguagem de Programação - Capítulo 2

Embed Size (px)

Citation preview

Page 1: Linguagem de Programação - Capítulo 2

Maria Aparecida dos Reis França dos Santos

Introdução

Vb.Net: interface gráfi ca, funções e arrays

Capítulo2

Quando desenvolvemos uma aplicação que faz uso de uma interface gráfi ca, sentimos a necessidade de manipular as imagens em um projeto. E muitas vezes, ao desenvolver uma aplicação, devido ao grande número de valores disponíveis para comparação, necessitamos trabalhar de uma forma que se obtenha melhor desempenho.

Neste capítulo, vamos trabalhar com imagens e manipular os dados em vetores e matrizes. E para melhor interface com o usuário, também apresentaremos duas formas de trabalhar com o menu.

Na atualidade, a web proporciona o compartilhamento de notícias, de entretenimento, dentre outras coisas e, entre elas, do conhecimento. É comum encontrarmos códigos fornecidos por usuários mais experientes e até mesmo códigos fornecidos pelo fabricante do software, a fi m de agilizar o processo de desenvolvimento. Por fi m, vamos também conhecer o acesso à Universal Serial Bus (USB) para que você possa personalizá-lo de acordo com suas necessidades.

Page 2: Linguagem de Programação - Capítulo 2

2 UNIUBE

2.1 Trabalhando com imagens2.2 Trabalhando com funções

2.2.1 Subprocedimento2.2.2 Função

2.3 Variáveis públicas e privadas2.4 Arrays

2.4.1 Arrays de uma dimensão (vetor)2.4.2 Arrays multidimensionais (matriz)

2.5 Menus2.5.1 MenuStrip2.5.2 ToolStrip

2.6 USB

Esquema

Ao final dos estudos deste capítulo, esperamos que você seja capaz de:

• Manipular imagens em objetos.

• Conhecer e utilizar as funções intrínsecas.

• Criar e manipular subprocedimento, função simples e com passagem de parâmetro.

• Criar e manipular array de uma dimensão e multidimensional.

• Criar e manipular MenuStrip e ToolStrip.

• Conhecer classes de acesso à porta USB.

Objetivos

Page 3: Linguagem de Programação - Capítulo 2

UNIUBE 3

Trabalhando com imagens2.1

Em muitas situações, é necessário trabalharmos com imagens.

Considere o formulário a seguir. A proposta desse formulário é que, quando o usuário digitar um valor numérico, nós, como desenvolvedores, deveremos fazer uma verificação informando ao nosso usuário se o valor digitado é negativo ou positivo. Além disso, também devemos verificar se o valor digitado é igual a 0 (zero) e, caso afirmativo, informarmos ao usuário que não será possível fazer a avaliação (Figura 1). Então, dando continuidade ao nosso projeto, insira um novo formulário (Form11).

Figura 1: Formulário para avaliar se o número digitado é positivo ou negativo.

Nesse formulário, foram utilizados os objetos textBox, label e button, trabalhados no capítulo anterior, tendo sido alteradas a propriedade name do textBox e do button para facilitar a programação e a propriedade text do label e do button para compreensão do usuário.

Ao clicar no btnOk, estamos programando conforme nosso objetivo: avaliar se o número informado é positivo, negativo ou zero. Para isso, primeiramente, inserimos as validações, conforme se vê na Figura 2 a seguir:

Page 4: Linguagem de Programação - Capítulo 2

4 UNIUBE

Figura 2: Validação em relação ao número digitado.

Então, se o valor for válido, vamos à parte do cálculo (Figura 3):

Figura 3: Validação do valor: se positivo ou negativo.

Salve o projeto e execute. Faça testes.

Agora, voltando ao design, coloque uma imagem no botão Ok, em vez de trabalhar com a propriedade text. Para isso, limpe a propriedade text do btnOk. Feito isso, vá à propriedade Image (do btnOk), como se vê na Figura 4.

Page 5: Linguagem de Programação - Capítulo 2

UNIUBE 5

Figura 4: Propriedade Image do BtnOk.

Observe que, nessa propriedade, do lado direito, aparece um ícone que permite identificar com qual imagem se deseja trabalhar. Clique nesse ícone, e a seguinte tela será exibida (Figura 5):

Figura 5: Tela para configurar a imagem com a qual vai trabalhar.

Page 6: Linguagem de Programação - Capítulo 2

6 UNIUBE

Você pode optar entre uma imagem que já foi utilizada em outro projeto ou indicar o local onde a imagem a ser utilizada se encontra (primeira opção). Vamos localizar uma imagem. Então, clique na opção “Local resource”, e, em seguida, em “Import” (Figura 6).

Figura 6: Tela para selecionar o arquivo da imagem.

Em seguida, localize o arquivo com a imagem que deseja apresentar nesse botão. Clique em abrir e, em seguida em Ok. A imagem será exibida no btnOk (Figura 7):

Figura 7: Imagem sendo exibida no btnOk.

Page 7: Linguagem de Programação - Capítulo 2

UNIUBE 7

A programação não precisa ser alterada. Você pode fazer o teste novamente e conferir. Salve e execute o projeto.

Mas pode acontecer de haver necessidade de se manter uma imagem no formulário, não necessariamente em um botão, ou label, ou textBox. No caso de sistemas empresariais, é muito comum manter a logomarca da empresa em todos os formulários e relatórios. Nesse caso, é indicado que se utilize o PictureBox.

Para manipular esse objeto é necessário, basicamente, alterar a propriedade Image. Veja a Figura 8:

Figura 8: Configurando propriedade Image do PictureBox.

Quando a imagem é selecionada e mostrada, você pode alterar algumas propriedades para auxiliá-lo na exibição da mesma. Ao selecionar o PictureBox, um menu será exibido (Figura 9). Observe que a propriedade Size Mode contém uma lista de opções de configuração de como a imagem será mostrada – elas serão muito úteis!

Page 8: Linguagem de Programação - Capítulo 2

8 UNIUBE

Figura 9: Configurando propriedades do PictureBox.

Veja como cada propriedade vai interferir na visualização da imagem:

• Normal: fará com que a imagem assuma o tamanho em que foi gravada, mas permitirá que você redimensione o PictureBox, no entanto não interferirá no tamanho da imagem.

• StretchImage: permitirá que a imagem seja redimensionada, conforme o tamanho do objeto PictureBox. Selecione essa opção e redimensione o PictureBox. Observe que mesmo que distorça a imagem, ela vai ser redimensionada conforme o tamanho do objeto (PictureBox).

• AutoSize: parece com a opção Normal. Mantém o tamanho da imagem, mas não permite que redimensione o PictureBox.

• CenterImage: é indicada quando se deseja redimensionar o PictureBox, como a propriedade Normal, mas centralizando a imagem dentro do PictureBox.

• Zoom: é parecido com o StretchImage mas, ao redimensionar a imagem, ele mantém a proporção de definição entre altura e largura, não permitindo que a imagem fique disforme.

No nosso exemplo, vamos optar por Zoom. Redimensione o PictureBox, e o posicione no canto superior direito (Figura 10).

Figura 10: PictureBox configurado e posicionado.

Page 9: Linguagem de Programação - Capítulo 2

UNIUBE 9

Insira um PictureBox e configure uma imagem nele. Selecione cada uma das opções e faça testes para ver o resultados.

AGORA É A SUA VEZ

Mas, em algumas situações, pode ser necessário trabalhar com mais de uma imagem e modificá-las em tempo de execução. Para uma situação assim, o ideal é trabalhar com o ImageList, conforme veremos, logo adiante.

Insira mais um formulário no seu projeto, o Form12, conforme o design, a seguir (Figura 11).

Figura 11: Design do Form12.

Nos botões, não vamos utilizar a propriedade Text, vamos trabalhar com imagens.

Para este momento, você trabalhará com o componente ImageList. Para isso, clique no ImageList na ToolBox. Mas, atenção, ele está dentro de Components na ToolBox. Então, role a ToolBox para baixo até localizá-lo (Figura 12).

Page 10: Linguagem de Programação - Capítulo 2

10 UNIUBE

Figura 12: Localizando o ImageList.

Clique no ImageList e clique no fundo do formulário. Não aparecerá nada no formulário mas, abaixo do formulário, aparecerá o componente ImageList pronto para ser utilizado (Figura 13).

Page 11: Linguagem de Programação - Capítulo 2

UNIUBE 11

Figura 13: Localizando o ImageList no formulário.

Agora, selecione o ImageList e trabalhe com as propriedades dele. Esse componente tem uma propriedade chamada Images (Figura 14) e nela está escrito Collection. Isso é que distingue o trabalhar com um PictureBox e o com um ImageList. O ImageList permite que se trabalhe com uma coleção de imagens. Então, clique no cantinho direito dessa propriedade (...), e selecione as imagens com as quais trabalhará nesse formulário.

Page 12: Linguagem de Programação - Capítulo 2

12 UNIUBE

Figura 14: Opção Images do ImageList.

Ao clicar nessa propriedade, selecionamos as imagens que vamos utilizar nos dois botões: Ok e Limpar. Para isso, na tela que se abriu, clique no botão Add e selecione as imagens para os botões (Figura 15).

Figura 15: Adicionando imagens no ImageList.

Observe que as imagens inseridas são mostradas na caixa Members. Se desejar inserir mais imagens, utilize novamente o botão Add e, se precisar tirar uma imagem dessa caixa, utilize o botão Remove (Figura 16). Clique no botão Ok, para dar continuidade.

Page 13: Linguagem de Programação - Capítulo 2

UNIUBE 13

Figura 16: Imagens inseridas no ImageList.

Mas, agora, é necessário fazer com que os buttons que foram criados “vejam” as imagens do ImageList. Para isso, selecione os dois botões. Os buttons e outros objetos têm uma propriedade chamada ImageList. Quando você clicar na propriedade ImageList, para visualizar as opções, é mostrada uma lista de todos os ImageList que existirem nesse formulário (Figura 16). E, então, escolha o nosso ImageList – o ImageList1.

Page 14: Linguagem de Programação - Capítulo 2

14 UNIUBE

Figura 16: Imagens inseridas no ImageList.

Um formulário pode ter mais de um ImageList. Em algumas situações, por exemplo, pode ser necessário organizar as imagens por categorias.

IMPORTANTE!

A partir desse momento, esses botões poderão acessar qualquer uma das imagens que estão no ImageList1.

Selecione, agora, apenas o primeiro botão que será o botão Ok. Com ele selecionado, vamos às propriedades. Acesse a propriedade ImageIndex e clique no botão para abrir as opções. Observe que aparecerão três opções. No nosso caso, estão ordenadas da seguinte forma: 0 (zero, para o pincel que vamos utilizar para o botão Limpar); 1 (um, para a imagem que vamos utilizar para o botão Ok); none (um quadradinho em branco, simbolizando o vazio, para quando você não desejar mostrar nenhuma imagem, como na Figura 17). Escolha a opção de imagem que você inseriu para o botão Ok, e depois repita o procedimento para o botão Limpar.

Page 15: Linguagem de Programação - Capítulo 2

UNIUBE 15

Figura 17: Opções do ImageIndex.

O valor numérico que representa o vazio (none) – opção para não mostrar nenhuma imagem, é o -1.

PARADA OBRIGATÓRIA

Salve o projeto e execute para ver o resultado.

Outra forma é informar esses valores para configurar o ImageIndex em tempo de execução e não aqui no design acessando as propriedades.

No nosso caso, desejamos que, assim que o formulário for aberto, esses botões já recebam as imagens para identificação dos botões. Então, vamos utilizar outro evento: o evento Load, do formulário. Ou seja, o momento em que o formulário for carregado para a memória.

Page 16: Linguagem de Programação - Capítulo 2

16 UNIUBE

Para que você veja o resultado, vá à propriedade ImageIndex dos dois botões, e escolha a opção None para não exibir nenhuma imagem.

IMPORTANTE!

No design do nosso formulário, dê duplo clique no seu fundo e, imediatamente, a janela onde já programamos o evento Click de um button é exibida, mas agora mostrando-nos o evento Load do Form12 (Figura 18).

Figura 18: Evento Load do Form12.

Vamos programá-lo! Dentro desse evento, vamos, primeiramente, informar ao botão btnOk que a sua propriedade ImageIndex receberá o valor 1 – no nosso caso, é nesse índice que se encontra a imagem que desejo (Figura 19). Faça o mesmo para o btnLimpar informando o seu respectivo índice.

Figura 19: Informando o ImageIndex dos botões.

Agora, falta programar as ações dos botões. No caso do botão Ok, ele é meramente ilustrativo, visto que ainda não estamos trabalhando com banco de dados e salvando as informações. Mas no caso do Limpar, devemos limpar os dois textBoxs e mover o foco para o txtNome (Figura 20).

Page 17: Linguagem de Programação - Capítulo 2

UNIUBE 17

Figura 20: Programação do evento Click do botão btnLimpar.

Salve o projeto, execute e faça testes (Figura 21).

Figura 21: Form12 em execução.

Se desejar redimensionar as imagens que estão em um ImageList, selecione o ImageList e acesse a propriedade Size. Modifique a altura e a largura que estão informadas. Mas, fique atento para não distorcer as imagens, pois essa configuração será feita em todas as imagens do ImageList.

IMPORTANTE!

Trabalhando com funções2.2

O Vb.Net possui várias funções com o objetivo de facilitar a vida do desenvolvedor.

Existem muitas funções intrínsecas que permitem realizar, além de conversões entre tipos de variáveis, cálculos matemáticos, manipulação de strings, dentre outras ações. Vamos citar as mais usáveis, as que manipulam strings (Quadro 1).

Page 18: Linguagem de Programação - Capítulo 2

18 UNIUBE

Quadro 1: Principais funções de manipulação de strings.

Função Descrição Exemplo

Left

Retorna um número definido de caracteres à esquerda de uma determinada string.

a= Left("Universidade de Uberaba",12) a= "Universidade"

Right

Retorna um número definido de caracteres à direita de uma determinada string.

a= Rigth("Universidade de Uberaba",7) a= "Uberaba"

Mid

Retorna uma string contendo um número definido de caracteres, por meio dessa função. Sintaxe: Mid(String, início, comprimento)

a= Mid("Universidade de Uberaba", 14, 2) a= "de"

Len

Retorna o comprimento (tamanho) de uma string (na contagem do tamanho, são considerados inclusive os espaços).

a = len("Universidade de Uberaba") a = 23

TrimRemove todos os espaços que existem dentro de uma string.

a= Trim("Universidade de Uberaba”) a="UniversidadedeUberaba”

Lcase

Converte todos os caracteres de uma string para caracteres minúsculos.

a= Lcase("Uberaba") a="uberaba"

Ucase

Converte todos os caracteres de uma string para caracteres maiúsculos.

a= Ucase("Uberaba") a="UBERABA"

Também há duas funções que nos retornam valores em relação à hora e à data do sistema (Quadro 2):

Quadro 2: Principais funções de manipulação de data e hora do sistema.

Função Descrição Exemplo

TodayRetorna à data eà hora atual.

a=Today() a= "10/10/2010"

Now

Retorna à data atual no formato: 0:00:00 A.M.

a=Now() a= "10/10/2010 12:10:45"

Vamos inserir mais um formulário no nosso projeto de estudo, o Form13, para que possamos testar subprocedimentos e funções.

Page 19: Linguagem de Programação - Capítulo 2

UNIUBE 19

2.2.1 Subprocedimento

Um Subprocedimento é uma série de declarações efetuadas por meio do Sub e do End Sub (Figura 22).

Figura 22: Declaração de uma Sub em um formulário.

Atenção, um Subprocedimento não retorna um valor ao código de chamada!

IMPORTANTE!

O Sub teste() é um subprocedimento. O Subprocedimento é encarregado de realizar uma tarefa, ou mais tarefas, e depois retornar ao código de onde foi chamado. No nosso exemplo, criamos um Sub teste para que seja mostrada uma mensagem “atenção para a mensagem” (Figura 23).

Figura 23: Sub teste com linha de comando a ser executada.

Page 20: Linguagem de Programação - Capítulo 2

20 UNIUBE

Quando um procedimento é chamado, na sequência, suas linhas de comando são executadas e apenas é finalizado quando encontra, na execução do código, o primeiro End Sub, Exit Sub, ou o comando Return. No caso do exemplo anterior (Figura 23), o Sub teste() é finalizado no End Sub.

O padrão é que todos os Subprocedimentos sejam públicos, o que significa que você pode chamá-lo de qualquer lugar no seu projeto, de onde você o definiu.

No Form13, vamos criar três botões como se vê na Figura 24 a seguir.

Figura 24: Designer do Form13.

Ao clicar no Button1, vamos solicitar que o Subteste() seja executado (Figura 25):

Figura 25: Linha de comando do evento Click do Button1.

Page 21: Linguagem de Programação - Capítulo 2

UNIUBE 21

Salve o projeto, e vamos executá-lo (Figura 26).

Figura 26: Form13 em execução ao clicar no Button1.

Agora, vamos programar para que todos os botões, quando cada um for clicado, exibam a mesma mensagem (Figura 27):

Figura 27: Linha de comando do evento Click do Button1, Button2 e Button3.

Nesse exemplo, a Subteste() possui apenas uma linha de comando e, por isso, você pode deduzir que seria a mesma coisa se você repetisse o comando MsgBox para todos os botões. Mas imagine uma Sub extensa em que fosse necessário fazer uma manutenção. Você teria que se preocupar em manter todas as linhas de comando dos botões

Page 22: Linguagem de Programação - Capítulo 2

22 UNIUBE

iguais, para que continuassem a ter o mesmo comportamento. Quando utilizamos uma Sub, fazemos a manutenção apenas uma vez – nas Subtestes - pois, nos botões, apenas a Subteste é chamada.

2.2.2 Função

Um procedimento pode ser uma função – Function. Uma Function é idêntica a um Subprocedimento; o que nos faz optar por um ou outra é que a função é utilizada caso seja necessário retornar valores para o módulo.

Vamos fazer algumas pequenas modificações no design do Form13 (Figura 28). Vamos inserir dois labels para identificar o conteúdo dos textBoxs, e dois textBoxs. O primeiro textBox vai receber um valor do usuário, e, no segundo, vamos calcular o dobro desse número informado.

Figura 28: Form13 após modificações no design.

No nosso exemplo, ainda no Form13, criamos uma function NovoTeste() que fará o cálculo do dobro do valor informado pelo usuário no txtIdade.text (Figura 29).

Page 23: Linguagem de Programação - Capítulo 2

UNIUBE 23

Figura 29: Function NovoTeste().

Mas, desta vez, é diferente. Nesse exemplo, queremos que isso aconteça ao clicar no Button1, mas o cálculo deve estar na Novo Teste(). Então, ao chamar a function NovoTeste(), devemos informar o valor que deve ser usado no cálculo na function (Figura 30). Esse valor é enviado como um parâmetro da função.

Figura 30: O envio do valor do txtIdade para a função NovoTeste().

Mas é necessário que a função NovoTeste() armazene o valor que foi enviado, nesse caso o que está na propriedade Text do TxtIdade, em algum lugar. Então, declaramos um argumento para que seja manipulado no decorrer da função (Figura 31). Observe que o argumento é declarado como uma variável, informando o seu tipo de dado. Para essa declaração não utilizamos o Dim, mas ByVal ou ByRef.

Page 24: Linguagem de Programação - Capítulo 2

24 UNIUBE

Figura 31: Utilização do ByVal.

Agora, é possível armazenar o resultado do dobro encontrado na variável da função, dobro. Essa variável é declarada da mesma forma que já havíamos fazendo, utilizando o comando Dim.

Quando utilizar ByVal e ByRef ?

Quando se utiliza ByVal é feita uma cópia do valor do parâmetro. O Vb.NET passa uma cópia do valor (que está no text do textBox) para a rotina. Desta forma a rotina não pode alterar o valor do parâmetro em sua origem.Retorne ao exemplo da Figura 31.

Observe que no exemplo, a variável var que está na função NovoTeste() fez uma operação que modificou o valor de var (adicionou 1 no valor). Mas o valor de origem, que está no text do txtNum, permaneceu o mesmo – não foi adicionado 1 no seu valor.

Mas se for necessário que essa modificação de valor seja mostrada, então, devemos usar a chave ByRef.

Veja o mesmo exemplo utilizando o ByRef:

IMPORTANTE!

Page 25: Linguagem de Programação - Capítulo 2

UNIUBE 25

Observe que, agora, a variável var que está na função NovoTeste() fez uma operação que modificou o valor de var (adicionou 1 no valor) da mesma forma. Mas o valor de origem, que está no text do txtNum, foi modificado – foi adicionado 1 no seu valor.

Até aqui, enviamos um valor para a função, e fizemos cálculo com esse valor.

Mas, e se for necessário retornar esse valor para o lugar de onde foi chamada?

Para isso, vamos dar o comando Return na função NovoTeste(), retornando ao código de origem com o resultado do cálculo (Figura 32):

Figura 32: Retorno da função com o resultado do cálculo que está armazenado na variável dobro.

Page 26: Linguagem de Programação - Capítulo 2

26 UNIUBE

Observe que, da forma que estamos chamando a função, o valor retorna, mas não é armazenado em lugar algum. Para que você possa manipular esse valor retornado, uma variável pode armazenar esse valor, ou você pode atribuir diretamente a um objeto (Figura 33).

Figura 33: Retorno da função com o resultado do cálculo que está armazenado na variável dobro para ser armazenada em uma variável ou exibida em um textBox.

Foi utilizada uma linha de comentário, com uma aspa simples (‘) antes da linha, para digitar um comentário.

SAIBA MAIS

Page 27: Linguagem de Programação - Capítulo 2

UNIUBE 27

As variáveis podem ser públicas ou privadas (também denominadas como locais).

O comando que utilizamos para declarar variável é Dim. Até agora, declaramos variáveis privadas, pois declaramos sempre dentro de um escopo (Figura 34).

Variáveis públicas e privadas2.3

Desta forma, apenas a Sub Button1_Click pode “ver” a variável result, pois a linha de declaração está dentro dessa Sub. Assim, todo o projeto verá essa variável, permitindo que se trabalhe com essa variável em qualquer Sub ou Function (Figura 35):

Figura 34: Variável privada (local).

Page 28: Linguagem de Programação - Capítulo 2

28 UNIUBE

Figura 35: Variável pública.

O array pode ser de uma dimensão (também conhecido como vetor) ou multidimensional (também conhecido como matriz).

2.4.1 Arrays de uma dimensão (vetor)

Acrescentaremos mais um formulário ao nosso projeto, o Form14.

Arrays 2.4

Page 29: Linguagem de Programação - Capítulo 2

UNIUBE 29

Considere que você precise atribuir, em três variáveis, o nome de três pessoas que constam de uma lista. Considerando que ainda não apresentamos o conceito de Array, você declararia três variáveis, e atribuiria um nome para cada, conforme a Figura 36, a seguir:

Figura 36: Alimentando variáveis distintas.

Mas podemos armazenar esses valores em apenas uma variável do tipo array.

Array é uma lista de valores na qual esses valores são identificados por um nome e um índice atribuído ao valor específico no Array. Cada valor que compõe um array é chamado de elemento.

Para declarar um array, também conhecido como vetor, utilizamos também o comando Dim, mas com uma modificação. Agora, quando nomearmos o vetor, será necessário informar quantas posições ele terá. Cada posição do vetor é identificada por um número que começa em 0 (zero). Então, se desejar criar um vetor Vet de 3 posições, a definição será semelhante à demonstrada na Figura 37, a seguir:

Figura 37: Declaração de vetor de 3 posições.

Page 30: Linguagem de Programação - Capítulo 2

30 UNIUBE

Sempre que uma matriz, ou vetor, se ela foi declarada de um tipo de dado numérico, todas as suas posições recebem 0 (zero). E se ela foi declarada de um tipo caractere, todas as suas posições recebem “” (vazio).

IMPORTANTE!

Quando se define um array obrigatoriamente todos os elementos serão do mesmo tipo de dado.

Simbolicamente, pode-se ilustrar o vetor Vet(2) da seguinte forma (Figura 38):

Figura 38: Declaração de vetor de 3 posições.

Para melhor auxiliar na compreensão, colocamos abaixo de cada posição do vetor o seu respectivo índice. Observe que a numeração dos índices começou em 0 (zero), e o total de 3 posições a disposição do índice Vet() para dados do tipo String, pois o Vet() foi definido do tipo String.

Agora, na Figura 39, vamos alimentar o vetor com os nomes com que alimentamos as três variáveis na Figura 36 anterior:

Figura 39: Alimentando o vetor Vet().

No Form14 que acrescentamos, vamos gerar uma lista em um textBox. Nesse mesmo formulário o usuário informará o número final da lista a ser gerada. Veja o design deste formulário na Figura 40 a seguir:

0 1 2

Page 31: Linguagem de Programação - Capítulo 2

UNIUBE 31

Figura 40: Design do Form14.

Com o objetivo de que um textBox fique com mais de uma linha para edição, selecione o textBox e acesse a propriedade Multline. O padrão é ser mostrado o valor False. Altere para True. Vá ao textBox e redimensione-o com a altura que se fizer necessária.

SAIBA MAIS

Nessa altura, o formulário está com o design pronto. Vamos à programação do botão Gerar Lista.

Caro aluno, nesse exercício, para não nos desviarmos do nosso objetivo, focaremos primeiramente o cálculo e, em seguida, faremos as validações.

Para que façamos a lista de números que será de 0 (zero) até o número que o usuário determinar, precisaremos de um vetor. Não podemos defini-lo antes de identificar o número final que o usuário informou. Então, necessitamos também de utilizar uma variável para armazenar esse número informado e, em seguida, atribuir a essa variável o número informado (Figura 41):

Page 32: Linguagem de Programação - Capítulo 2

32 UNIUBE

Figura 41: Definição e atribuição de valor na variável que armazena o número limite informado pelo usuário.

A partir do momento em que temos o número limite do vetor informado pelo usuário, podemos criar o vetor (Figura 42). Mas, lembre-se de que o índice do vetor é iniciado em 0 (zero), consequentemente precisamos subtrair 1 (um) do número informado pelo usuário:

Figura 42: Definição do vetor.

Perceba que podemos utilizar um valor absoluto para definir o tamanho do vetor, ou uma variável poderá fazer esse papel.

E para alimentar o vetor?

A princípio, considerando que o usuário informou o número 5, faríamos coforme demonstrado na Figura 43:

Page 33: Linguagem de Programação - Capítulo 2

UNIUBE 33

Figura 43: Alimentando o vetor.

Mas, observe bem..., o índice do vetor é uma sequência numérica! E, claro, a lista gerada também, pois é o nosso objetivo gerar essa lista.

Logo, se é uma sequência numérica, tem uma estrutura de controle que pode ser útil nessa situação. Você se lembra das estruturas de repetição While e For, que vimos no Capítulo 1?

Por considerar que se trata de uma sequência, a estrutura For será escolhida. Mas poderíamos utilizar o While que também daria certo. Já discutimos sobre isso no Capítulo 1.

Para utilizarmos a For, será necessário criar uma variável para ser o contador dessa estrutura. E como a lista gerada também é uma sequência, utilizaremos o mesmo contador, mas acrescentando 1 (um), pois o usuário não sabe que o índice de um vetor se inicia em 0 (zero)! (Figura 44)

Page 34: Linguagem de Programação - Capítulo 2

34 UNIUBE

Figura 44: Alimentando o vetor, com estrutura de repetição.

A seguir, vamos programar para mostrar o resultado no textBox, como nos exemplos que fizemos no Capítulo 1, com concatenação (Figura 45).

Figura 45: Exibindo os valores em um textBox.

2.4.2 Arrays multidimensionais (matriz)

O array com mais de uma dimensão é representado por uma matriz com linhas e colunas.

Para declarar um array multidimensional, conhecido como matriz, utilizamos também o comando Dim, mas com uma modificação. Nesta

Page 35: Linguagem de Programação - Capítulo 2

UNIUBE 35

situação, quando dermos o nome da matriz, será necessário informar quantas posições o array terá – linhas e colunas, como na Figura 46.

Figura 46: Declaração da matriz 2 x 4.

Cada posição da matriz é identificada com a posição da linha e da coluna. E o índice na matriz, também começa em 0 (zero), como no vetor. Então, se você criar uma matriz Mat de 2 por 4, significa uma matriz do tipo 2 x 4 – 2 linhas e 4 colunas, como representado na Figura 47 a seguir.

0 1 2 3Figura 47: Representação gráfica da matriz 2 x 4.

01

Quando se define um array multidimensional (matriz) obrigatoriamente todos os elementos serão do mesmo tipo de dado, como no array unidimensional (vetor).

Insira mais um formulário no nosso projeto – Form15. Vamos fazer um array multidimensional. Nosso objetivo é fazer um formulário em que o usuário informe 3 valores, que serão armazenados na primeira linha da matriz. E depois, geraremos o dobro desses valores na segunda linha da matriz. Então, nossa matriz será de 2x3. Mostraremos os valores da matriz em dois textBoxs – um para a primeira linha, e outro para a segunda linha. Para facilitar, criaremos um botão ao lado do textBox onde o usuário irá informar o número a ser inserido na primeira linha da matriz.

Nessa altura, o design do formulário fica como visualizado na Figura 48:

Page 36: Linguagem de Programação - Capítulo 2

36 UNIUBE

Figura 48: Design do Form15.

Nosso próximo passo é a programação do botão para inserir o número da matriz. Nesse formulário, teremos um detalhe a mais para nos preocupar. Precisamos “enxergar” a matriz, tanto no botão Ok, quanto no botão Gerar linha 2. No botão Ok, vamos inserir números na matriz – alimentá-la, e no botão Gerar linha 2, manipularemos a matriz, lendo a primeira linha e gerando os valores da segunda, com o dobro dos valores da primeira linha.

Então, se declararmos a matriz dentro do Private Sub btnOk_Click, apenas essa Sub vai “enxergar” tal matriz ou qualquer variável que seja declarada lá. Para resolver nosso problema, vamos declarar a nossa matriz como pública para esse projeto. A declaração deve ser feita fora da Sub (Figura 49).

Figura 49: Declaração de matriz pública.

Page 37: Linguagem de Programação - Capítulo 2

UNIUBE 37

Voltemos a Sub btnOk_Click. Antes de alimentar a variável Num com o número informado, devemos fazer as validações (Figura 50).

Figura 50: Validações do txtNum, onde o usuário deve informar o valor a ser inserido na matriz.

Para esse exercício, não vamos permitir que o usuário insira o número 0 (zero). Assim, faz-se necessário criar mais uma validação (Figura 51).

Figura 51: Validação para não aceitar número menor ou igual a zero.

Page 38: Linguagem de Programação - Capítulo 2

38 UNIUBE

Se for necessário considerar o 0 (zero) um valor válido, você pode trabalhar com uma variável contador pública e, sempre que clicar no botão Ok, você incrementará a variável com 1 (cont = cont + 1).

IMPORTANTE!

Vejamos como fica o mapa da matriz, para identificarmos o índice de cada posição (Figura 52):

(0,0) (0,1) (0,2)(1,0) (1,1) (1,2)

Figura 52: Identificando os índices da matriz gerada.

Observe que, na primeira linha, a identificação da linha é sempre a mesma – 0 (zero), e o valor que varia é o que identifica a coluna. Então, podemos utilizar uma estrutura de repetição para nos auxiliar a inserir o valor na matriz.

Antes de inserirmos o valor na matriz, vamos checar se aquela posição é 0 (zero); se verdadeiro, inseriremos o valor e sairemos imediatamente da Sub utilizando o Exit For. Se não, passemos para a próxima posição (Figura 53):

Page 39: Linguagem de Programação - Capítulo 2

UNIUBE 39

Figura 53: Alimentando a matriz, linha 0 (zero), com a estrutura de repetição FOR.

Ao encontrarmos a primeira posição que contém o valor 0 (zero), inserimos o valor e finalizamos a Sub, pois se continuarmos, como todas as posição são inicializadas com 0 (zero), por se tratar de dado numérico, todas as posições receberiam o primeiro valor que fosse inserido na matriz!

IMPORTANTE!

Vamos à programação do botão Gerar linha 2. Basta ler o valor na linha 0 (zero) e na linha 1(um) atribuir o valor dobrado (Figura 54).

Page 40: Linguagem de Programação - Capítulo 2

40 UNIUBE

Figura 54: Alimentando a matriz, linha 1 (um), com a estrutura de repetição FOR.

Poderíamos ter implementado o botão Ok de modo que, ao inserirmos o valor na linha 0, imediatamente já inseriríamos o dobro na linha 1. Bastava acrescentar abaixo do Mat(0,cont)=num, Mat(1,cont)=num *2.

IMPORTANTE!

No Capítulo 1, você aprendeu que, ao criar um novo formulário em um projeto, devem-se acessar as propriedades do projeto para modificar o Start Form, para selecionar esse formulário a ser aberto ao compilar e executar o projeto (reveja o tópico 1.3.2)

Nesse tópico, vamos aprender a utilizar duas formas de Menu. Na barra de ferramentas (toolBox) há uma categoria chamada Menus & Toolbars. Vamos explorar menuStrip e toolStrip.

2.5.1 MenuStrip

Precisaremos de um novo formulário, o Form16. Selecione o menuStrip na toolBox, e clique no fundo do formulário (Figura 55).

Menus2.5

Page 41: Linguagem de Programação - Capítulo 2

UNIUBE 41

Figura 55: MenuStrip na ToolBox.

Ao clicar, o seu formulário terá um objeto na parte inferior, onde você pode configurar seus atributos. E no formulário, aparecerá uma barra com um espaço com o texto “Type Here” (Figura 56).

Page 42: Linguagem de Programação - Capítulo 2

42 UNIUBE

Figura 56: Inserindo um menuStrip no formulário.

Na opção Type Here, clique para ir construindo o menu deste projeto. Ao clicar e começar a digitar a nossa primeira opção de menu, Formulários, observe que ao lado dessa opção aparecerá outro Type Here, e abaixo também. Então, vamos construindo o nosso menu. Abaixo de Formulários, coloque a opção Exemplo RadioButton (Figura 57).

Page 43: Linguagem de Programação - Capítulo 2

UNIUBE 43

Figura 57: Construindo o menu – opção Formulários.

Você poderá criar uma opção para cada formulário já criado. Use sua criatividade para organizar o seu menu.

Quando seu menu estiver todo organizado, é hora de programá-lo. Então, ainda no modo design do formulário, dê duplo clique na opção de formulário que vamos programar para que seja aberto quando o usuário clicar (Figura 58).

Page 44: Linguagem de Programação - Capítulo 2

44 UNIUBE

Figura 58: Programar opção de menu.

Desta forma, a página de programação é exibida. Recapitulando, quando o usuário vir essa opção no menu, e clicar nela, o formulário indicado deverá ser aberto. Então, no evento, ao clicar nesse item do menu, vamos exibir o Form8 – esse é o nome do nosso formulário que tem um exemplo de como se trabalha com RadioButton (Figura 59).

Figura 59: Abrir formulário.

Há duas opções para exibir ou abrir um formulário: Show e ShowDialog. O Show exibe o formulário e o usuário fica livre para manipular todo e qualquer formulário do projeto. O ShowDialog exibe o formulário, mas o usuário só poderá manipular outro formulário se esse que foi aberto for fechado.

Page 45: Linguagem de Programação - Capítulo 2

UNIUBE 45

Faça o teste com uma opção de cada vez para que possa observar o comportamento dos formulários.

Particularmente, é mais seguro trabalhar com o ShowDialog, pois o usuário não fica com um processo aberto dando início a outro. Então, enquanto estivermos trabalhando juntos, vamos trabalhar com o ShowDialog.

Salve o projeto e execute-o (Figura 60).

Figura 60: Menu chamando Form8 com ShowDialog.

Um recurso que podemos utilizar são as configurações de atalho para o teclado no menu. No formulário, no modo Design, clique na opção Formulário, e coloque um & na frente de Formulário. A letra F ficará sublinhada, e o usuário pode clicar na opção ou utilizar as teclas Alt+F para abrir essa opção do menu (Figura 61).

Page 46: Linguagem de Programação - Capítulo 2

46 UNIUBE

Figura 61: Menu chamando Form8 com ShowDialog.

Salve o projeto e execute-o.

2.5.2 ToolStrip

Vamos adicionar um novo formulário, o Form17.

Selecione o ToolStrip na ToolBox, e clique no fundo do formulário (Figura 62).

Page 47: Linguagem de Programação - Capítulo 2

UNIUBE 47

Figura 62: Inserindo um ToolStrip no formulário.

Essa opção de menu é muito parecida com o MenuStrip, mas o ToolStrip tem a opção de se fazer uma barra com imagens e botões (barra de ferramenta de acesso rápido) para também serem programados.

Essa opção de menu é, geralmente, utilizada quando já se tem a conexão com um banco de dados.

SAIBA MAIS

Vamos programar um botão para abrir o formulário com exemplo de RadioButton, como fizemos no formulário anterior (Figura 63).

Page 48: Linguagem de Programação - Capítulo 2

48 UNIUBE

Figura 63: Inserindo um button no ToolStrip.

Com o botão inserido, vamos configurar suas propriedades antes de programá-lo. Então, com o botão selecionado, vá à caixa de propriedades e selecione a opção Image – já conhecemos essa propriedade no Capítulo 1. Agora, basta clicar em Import e localizar a imagem que deseja exibir nesse button (Figura 64).

Page 49: Linguagem de Programação - Capítulo 2

UNIUBE 49

Figura 64: Inserindo figura em um button no ToolStrip.

Como fizemos no MenuStrip, basta dar duplo clique no button já com a imagem, e a janela de programação será exibida. A linha de programação é a mesma utilizando o comando Show ou ShowDialog para exibir o Form8 (Figura 65).

Figura 65: Abrir formulário.

Volte para o design do formulário e acrescente a opção Sair com um button também, para que, quando o usuário clicar nessa opção, o projeto seja encerrado. Acrescente a imagem, e, em seguida, dê duplo clique no botão. O comando para que o projeto disponibilize a memória utilizada é o Dispose (Figura 66).

Page 50: Linguagem de Programação - Capítulo 2

50 UNIUBE

Figura 66: Disponibilizar memória ocupada pelo projeto.

Existe uma grande discussão sobre qual melhor opção: Dispose ou Close?

Então, sugiro que leia o artigo da DEVMEDIA no link, a seguir, em que se explica a diferença de performance e escalabilidade: http://www.devmedia.com.br/dicas-net-dispose-ou-nao-dispose/2586

PESQUISANDO NA WEB

O Vb.Net é compatível com o modelo de programação COM e é mais conhecido por incorporar componentes de interface de usuário pré-definidos que permitem aos programadores criar interfaces gráficas de usuário (GUI) para programas em uma quantidade muito menor de tempo. Você também pode configurar as informações da porta USB, utilizando o acesso do Visual Basic ao modelo de programação COM.

Hoje, encontram-se disponíveis, na internet, as classes de acesso à USB prontas para download, as quais você apenas programa para que se tenha o comportamento desejado para o programa – ao ativar e ao desativar a USB.

USB 2.6

Page 51: Linguagem de Programação - Capítulo 2

UNIUBE 51

Para utilizar a classe de acesso USB que está na Biblioteca do componente, crie um novo formulário no nosso projeto – Form18.

Caro(a) aluno(a), esse código de acesso à unidade USB estará disponível na Biblioteca do componente em arquivo formatado pdf, intitulado de USB, para que possa copiar as linhas e utilizá-las no seu projeto para conectar a porta USB.

Observe que as linhas de programação estão referenciando ao Form18 do nosso projeto.

PARADA OBRIGATÓRIA

Insira a classe no seu formulário e faça as adequações necessárias para o projeto que estiver realizando.

Observe nas linhas de programação desta classe uma linha com comentário no momento em que a porta USB é acessada. Nesse momento, você pode utilizá-la conforme suas necessidades.

Mais abaixo, nas linhas de código, você encontrará outra linha com comentário no momento em que a porta USB é desativada. Assim como no momento anterior (ao ativá-la), você pode utilizá-la conforme suas necessidades.

Salve o projeto.

DEVMEDIA. Disponível em: <http://www.devmedia.com.br/dicas-net-dispose-ou-nao-dispose/2586>. Acesso em: jan.2014.

Microsoft Library. Disponível em: <http://msdn.microsoft.com/pt-br/library/>. Acesso em: jan.2014.

Referências

Page 52: Linguagem de Programação - Capítulo 2

52 UNIUBE

Atividades

Atividade 01

Observe o trecho de código:

Considerando o trecho de código acima desenvolvido em vb.net, julgue os itens seguintes.

I. Para a estrutura de repetição For utilizada no código, faltou a linha de programação para incrementar a variável “cont”.

II. O vetor “vet” será alimentado apenas com números pares.III. A variável de incremento “cont” apenas será incrementada se o resto

da divisão de “cont” por 2 for 0 (zero).

Estão corretos os itens:

a) I, II e III.b) II e III apenas.c) III apenasd) I e III apenas.e) II apenas.

Page 53: Linguagem de Programação - Capítulo 2

UNIUBE 53

Atividade 02

Suponha o código, a seguir, desenvolvido em vb.net:

Qual o resultado final da variável "vetor" ( trata-se de um vetor) a partir da entrada (5,4,3,2,8)?

a) (5,2,3,4,8)b) (4,3,2,1,7)c) (5,3,2,1,7)d) (6,5,4,3,9)e) (8,2,3,4,5)

Page 54: Linguagem de Programação - Capítulo 2

54 UNIUBE

Atividade 03

Analise o código, a seguir, desenvolvido em vb.net:

A variável Resul, ao final da execução, terá o resultado de:

a) 1,2,1,2,2b) 1,2,2,1,2c) 1,2,1,2,1d) 2,2,1,1,2e) 2,1,2,1,2

Atividade 04

Julgue as linhas de comando em vb.net apresentadas a seguir.

I. For cont = 10 To 1II. cont = cont Mod 2III. a(4) = 3IV. Dim a integer As expressões que possuem comandos corretos são:a) I e II apenas.b) II e IV apenas.

Page 55: Linguagem de Programação - Capítulo 2

UNIUBE 55

c) III e IV apenas.d) II e III apenas.e) I e IV apenas.

Atividade 05

Analise o código, a seguir, desenvolvido em vb.net:

O vetor vet, ao final da execução, terá o resultado de:

a) 2,1,2,1,2b) 1,2,2,1,2c) 1,2,1,2,1d) 2,2,1,1,2e) 1,2,1,2,2

Page 56: Linguagem de Programação - Capítulo 2

56 UNIUBE

Atividade 01Letra ‘e’.

Atividade 02Letra ‘a’.

Atividade 03Letra ‘c’.

Atividade 04Letra ‘e’.

Atividade 05Letra ‘c’.

Referencial de Respostas