Os formulários Windows e a Interface com o usuário
O Visual Basic pode ser considerado o precursor das linguagens visuais. Junte sua interface amigável com a facilidade e popularidade da linguagem Basic e creio que isto por si só explica toda a popularidade da linguagem. Se hoje existem outras linguagens visuais como Delphi , PowerBuilder , etc. o caminho foi aberto pelo Visual Basic.
A interface com o usuário é o diferencial principal do Visual Basic e os formulários Windows são o coração da interface Visual. Vamos pois neste artigo falar um pouco sobre formulários Windows e como podemos usá-los no Visual Basic .NET. Vou começar com uma recordação de dois conceitos fundamentais sobre formulários:
1- Janela - Bem , uma janela pode ser considerada uma área da tela do computador que usamos para exibir informações. Podemos usar várias janelas e também podemos mover e redimensionar as janelas. As janelas possuem dois estados :
- Modal - Uma janela modal deve ser manipulada e fechada antes que o usuário possa realizar outra tarefa no aplicativo.
- Não Modal - As janelas do tipo Não-Modal permitem ao usuário interagir com outras janelas no aplicativo sem necessidade de fechar a janela.
2- Controles - Tudo que existe em uma janela : botões , caixas de textos , listas , figuras , etc. pode ser considerado um controle. Eles pode ser clicados , digitados e permitem a interação com o usuário.
A primeira coisa que você deve fazer para desenvolver um projeto no VB.NET com formulários Windows é criar um projeto novo selecionando o tipo de projeto aplicativo Windows - Windows Application . Veja na figura abaixo:
|
|
A janela New Project |
As janelas : Solution Explorer e Properties |
Quando você clicar no botão OK , um novo projeto será gerado com um único formulário que será chamado de - form1.vb . Vamos então aproveitar e criar um aplicativo usando o formulário que temos no projeto. Antes é bom mudar o nome do formulário , afinal , form1 não significa muita coisa. Como você pode fazer isto ? É fácil ...
Vamos inserir alguns
controles no formulário . Para você inserir um controle no formulário padrão
que até o presente momento esta vazio basta ativar a janela ToolBox , pois
nela estão todos os controles que podemos incluir em um formulário Windows.
Você pode abrir a janela ToolBox clicando no Menu View e a seguir em
ToolBox ou pressionando Ctrl_Alt+X. Neste nosso projeto vamos usar os controles : Button , TextBox e Label. Para incluir um controle no formulário clique sobre o controle e a seguir clique no formulário e desenhe o controle no formulário ; outra maneira de inserir um controle no formulário é clicar duas vezes sobre o controle na janela ToolBox.
|
|
Então para praticar inseria dois controles Label , dois controles TextBox e três controles Button. A seguir ordene os controles no formulário conforme a figura 1.0 abaixo. Pela figura você pode notar que quando você inclui um controle no formulário ele exibe um texto padrão. Para alterar cada texto para algo mais legível altere a propriedade Text de cada controle para os nomes exibidos na figura 2.0.
Nota : Não existe mais o controle Command , o seu equivalente é o controle Button. Alguns controles como Label e Form não possuem mais a propriedade Caption ; no seu lugar temos a propriedade Text.
Figura 1.0 | Figura 2.0 |
Você já deve ter percebido qual o objetivo do nosso projeto. É isso mesmo : copiar , mover e excluir arquivos usando o VB.NET. Parece simples , não é mesmo ! Na verdade é simples mas você vai aprender muita coisa com ele , pode apostar...
Outra coisa que você deve sempre fazer em seus projetos é alterar o nome dos controles. Quando você inclui um controle em um formulário ele vem com o nome padrão : label1 , Button1 , TextBox1 , etc.(O VB cria uma sequência de controles).Você deve atribuir um nome sugestivo e relacionado com a função do controle. Assim o controle Label -0rigem- podemos chamar : lblOrigem a Label - Destino - podemos chamar: lblDestino.
Percebeu que no inicio do nome do controle eu usei um menmônico lbl para indicar que o controle é uma Label. Para TextBox seria txt , para Button seria btn , para formulário seria - frm . Você altera o nome de um controle atribuindo o novo nome a propriedade Name do controle na janela de propriedades.(Selecione o controle e pressione F4 para ativar a janela de propriedades do controle).
Uma convencão geralmente usada para dar nome a controles é acrescentar um prefixo em minúsculas aos nomes dos controles , sendo que este prefixo seria um menemônico relativo ao controle como indicado acima.
Vamos dar os seguintes nomes para cada controle inserido no nosso projeto:
Nome anterior | Name | Nome Anterior | Name | |
label1 | lblorigem | label2 | lbldestino | |
TextBox1 | txtorigem | TextBox2 | txtdestino | |
Button1 | btncopiar | Button2 | btnmover | |
Button3 | btnexcluir | form1 | frmWinForm1 |
Nota: O nome do controle tem que ser iniciado com uma letra.(Não pode iniciar com um número).
Você deve ficar atento para salvar o seu projeto a cada momento , pois se houver uma queda de energia você perde tudo. Para salvar o projeto selecione no Menu File a opção Save All para salvar o seu projeto. Podemos continuar agora...
Se você esta começando a aprender o Visual Basic agora creio que não teve dificuldades de chegar até aqui , mas se executar o projeto neste momento , pressionando F5 o clicando na seta ao lado da caixa Debug. Vai perceber que o formulário será exibido , e , se você clicar nos botões nada vai acontecer. Esta faltando o código.
O código em aplicações Visual Basic geralmente esta associado a eventos , e os controles possuem eventos que podemos usar para associar o código. Como vê alguém já havia pensado nisto para ajudar você. Quando você olha para um botão em um formulário a primeira tentação é pressioná-lo ou clicá-lo . Bem este é um evento muito usado , e , se você clicar duas vezes no seu botão de comando - btncopiar - vai obter o seguinte resultado na janela de código:
Figura 3.0 |
O VB.NET abre a janela de
código fonte já preparada para que possamos digitar o nosso código (você
quer ser um programador ou não ??? ).
Perceba também que existem duas caixas de listagem no alto desta janela(figura 3.0). A da esquerda permite a você selecionar os objetos que compõem seu formulário, e da da direita os eventos suportados por cada um destes objetos. |
|
O código que você inserir no evento Click do botão - btncopiar - será executado em resposta a ação de clicar no botão , ou seja , será a resposta ao evento Click do botão. Vamos então adicionar código ao evento Click do botão - btncopiar - naturalmente o código deverá realizar a ação de copiar o arquivo que deverá ser informado na caixa de texto - txtorigem - para o local informado em - txtdestino.
O VB.NET disponibiliza centenas de classes que você pode usar para realizar as mais diversas tarefas. Para efetuar a copia de um arquivo usamos o namespace System.IO . Este namespace já foi referenciado quando você criou o projeto pois ele faz parte da da System.DLL , assim , se você for digitando na janela de código system.IO.File.Copy o VB.NET irá lhe indicando os métodos disponíveis em cada classe.
Para tornar mais legível o seu código você pode declarar o namespace System.IO no início do seu projeto usando uma declaração imports desta forma não vai precisar se referir mais a parte System.IO no seu código.
Como disse vamos copiar arquivos por meio dos métodos estáticos do objeto File. O método Copy faz exatamente o que seu nome sugere e utiliza dois argumentos : a origem e o destino. Sua sintaxe é : Copy(Origem,Destino). O seu código então deve ser algo parecido com :
Nota: Um método estático pode ser usado diretamente sem ser necessário instanciar a classe a qual pertence para ser usado. No caso o método Copy é um método estático da classe File , por isto podemos fazer diretamente File.Copy.
- Note a
declaração Imports no início do arquivo. - Declarei duas variáveis chamadas : sOrigem e sDestino como sendo do tipo String. - A seguir atribui o conteúdo das caixas de texto ás variáveis criadas. (No VB.NET você deve informar o nome do controle e o nome da propriedade) - Finalmente usamos o método Copy passando os argumentos.
|
Se executar o código , informar a origem e o destino corretamente , o código vai funcionar. Mas a vida de um programador não é tão simples assim pois ele tem que prever as possíveis causas que possam impedir que o código não seja executado com sucesso. E se o arquivo origem ou destino não existirem ? E se não houver espaço para cópia ?
Neste caso dizemos que o programador tem que tratar o erro e pelo menos informar o que esta acontecendo. Felizmente o VB.NET possui uma classe para tratamento de erros estrutura : Try / Catch / Finally. O código já com o tratamento de erros ficará assim :
Obs: Para maiores detalhes no tratamento de erro veja o artigo: VB.NET : tratamento de erros usando Try-Catch-Finally
Private Sub btncopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncopiar.ClickDim sOrigem As String Dim sDestino As String
sOrigem = txtorigem. sDestino = txtdestino.Text Try File.Copy(sOrigem, sDestino) Catch oException As ExceptionMessageBox.Show(oException.Message) End TryEnd Sub |
Dentro de Try eu coloco o trecho de código que vai ser executado ; em Catch eu capturo as possíveis exceções e faço o tratamento. No caso eu estou usando a classe MessageBox para exibir via método Show a mensagem de erro para o usuário. (Show é um método estático da classe MessageBox).
Como exemplo , se você tentar executar e informar um arquivo inexistente vai obter a seguinte mensagem de erro: |
A instrução - Handles btncopiar.Click - colocada no final da declaração informa ao VB.NET que essa rotina é o manipulador desse evento. Podemos então ter um único procedimento manipulando diversos eventos ou um só evento com vários manipuladores. Vermos isto logo a seguir...
Vamos agora inserir o código nos demais botões. Para excluir um arquivo vamos usar o método Delete(nomeArquivo) da classe File e para mover um arquivo usamos o método Move(origem,destino) da mesma classe. O código fica então assim :
Private
Sub btnexcluir_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
btnexcluir.Click
Dim sOrigem As String sOrigem = txtorigem.Text Try File.Delete(sOrigem) Catch oException As ExceptionMessageBox.Show(oException.Message) End Try End Sub |
Código associando a botão Excluir |
Private
Sub btnmover_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
btnmover.Click
Dim sOrigem As String Dim sDestino As String
sOrigem = txtorigem.Text sDestino = txtdestino.Text Try File.Move(sOrigem, sDestino) Catch oException As ExceptionMessageBox.Show(oException.Message) End Try End Sub |
Código associando a botão Mover |
Vamos então manipular os três eventos Click por meio de um procedimento alterando a instrução Handles para incluir todos eles. Assim :
Private
Sub
ManipulaEventos(ByVal
sender As
Object,
ByVal e
As System.EventArgs)
Handles
btncopiar.Click, btnexcluir.Click, btnmover.Click MessageBox.Show("Esta rotina manipula os três eventos Click do projeto.") End Sub |
Nota: Você pode incrementar o projeto incluindo código para verificar se o arquivo informado na caixa de texto existe. Basta usar o método Exists da mesma classe File. Abaixo o código onde eu fiz as seguintes verificações:
Obs: o código ficou meio 'macarronico' mas eu usei apenas para ilustrar como fazer uma validação usando métodos da classe File.
Private
Sub btnmover_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles btnmover.Click
Dim sOrigem As String Dim sDestino As String Dim resultado As DialogResult
sOrigem = txtorigem.Text sDestino = txtdestino.Text If sOrigem = sDestino Then MessageBox.Show("Origem não pode ser igual ao Destino !", "Origem igual ao destino", MessageBoxButtons.OK) Exit Sub End If Try If File.Exists(sOrigem) Then If File.Exists(sDestino) Then If (MessageBox.Show("O arquivo destino já existe, deseja sobrepor o arquivo ?", "Mover Arquivos", MessageBoxButtons.YesNo)) = DialogResult.Yes Then File.Delete(sDestino) Else Exit Sub End If End If Else MessageBox.Show("O arquivo origem não existe ! Verifique...", "Arquivo origem ja existe", MessageBoxButtons.OK) Exit Try End If File.Move(sOrigem, sDestino) MessageBox.Show("Operação realizada com sucesso !", "Operação processada", MessageBoxButtons.OK) Catch oException As ExceptionMessageBox.Show(oException.Message) End TryEnd Sub |
Para encerrar vou falar da classe Messagebox usada no projeto. Ela é responsável pelas mensagens que são exibidas ao usuário . A classe Messagebox exibe uma janela de diálogo do tipo modal e o usuário terá agir sobre ela para continuar sua interação com o formulário.
A classe Messagebox exibe textos em uma caixa de diálogo e um conjunto de botões. Ela possui somente um método estático ; o método Show. Este método aceita 6 parâmetros principais diferentes e usar todos não é obrigatório. Podemos ter até 12 tipos de sobreposições para as várias combinações de parâmetros. A seguir a lista de parâmetros:
Parâmetro | Descrição | ||
Text | Representa a mensagem que você vai exibir. É obrigatório. | ||
Caption | Determina a barra de título que será exibida. | ||
Buttons | Controla os
botões exibidos na caixa de mensagem. Seus valores podem ser:
|
||
Icon | Controla qual figura será
exibida junto a mensagem. O valores possíveis são :
|
||
DefaultButton | Define qual o botão padrão que irá receber a ação do usuário.Para o caso de três botões podemos escolher qual será o botão padrão : Ex: | ||
Options | Controla a aparência da caixa
de mensagem. Temos opções para justificar o texto a direita , ser legível da
direita para a esquerda e permitir que a caixa de mensagem apareça apenas na
área principal. Os valores possíveis são :
|
Incrementando nossa caixa de mensagem com as opções acima podemos ter:
Private
Sub
ManipulaEventos(ByVal
sender As
Object,
ByVal e
As System.EventArgs)
Handles
btncopiar.Click, btnexcluir.Click, btnmover.Click MessageBox.Show("Esta rotina manipula os três eventos Click do projeto", "Teste", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button2, MessageBoxOptions.ServiceNotification) End Sub |
O resultado exibido será:
Quero chamar a atenção para o código que usei no exemplo 'macarronico' da validação. A parte que quero comentar é a seguinte:
If (MessageBox.Show("O arquivo destino já existe, deseja sobrepor o arquivo ?", "Mover Arquivos", MessageBoxButtons.YesNo)) = DialogResult.Yes Then File.Delete(sDestino) Else Exit Sub End If |
Ele faz o seguinte:
A propriedade DialogResult - obtêm o valor que que foi escolhido dentre os definidos na classe MessageBox. Os valores possíveis são :
Você apenas define qual o resultado deseja tratar.
Este é um artigo básico com conceitos simples ; ajuda principalmente quem esta começando , e , também quem é iniciado...
Até mais ver ...
José Carlos Macoratti