Primeiras aulas do curso VB.NET com Windows Forms Parte 4: Entendendo exceções

VB.NET com Windows Forms Parte 4: Entendendo exceções

Preparando o ambiente e conhecendo menus - Introdução

Oi, gente. Meu nome é Victorino Vila e veremos mais um treinamento de VISUALBASIC.NET. Esse é o nosso 4º treinamento, de uma longa carreira que nós estamos produzindo aqui na Alura, para que você aprenda essa linguagem de programação.

Nesse curso, a gente está dando uma ênfase ao desenvolvimento de visualbasic.net em aplicativos do tipo "WINDOWS FORMS", ou seja, aplicativos para o ambiente Windows. E a gente vai tratar agora, neste treinamento, sobre exceções. Afinal, o que são exceções?

Qualquer aplicativo que você desenvolva, seja "VISUALBASIC", na web ou para telefone celular, podem ocorrer, por exemplo, diversos problemas no aplicativo. Alguns problemas são esperados, outros inesperados.

Eu posso, por exemplo, estar usando o telefone celular e, eu quero acessar o meu WhatsApp ou meu Facebook. Mas, por exemplo, a minha internet cai. No momento em que o aplicativo tentar se conectar pela internet, ele vai ver que a Internet não existe.

Então, ele precisa mostrar para o usuário uma mensagem dizendo: "Olha, sua internet caiu". Só que essa mensagem não pode ser completamente maluca. Uma mensagem que o próprio compilador da linguagem que você desenvolveu traz para você. Tem que ser uma linguagem amigável para que o usuário olhe e diga: "Entendi. Eu estou sem internet".

Então, como eu falei. Na verdade, podem ocorrer dois tipos de erros quando a gente desenvolve o programa. Quando, por exemplo, eu estou aqui no meu desenvolvimento; se eu chegar aqui e fizer isso: "Dim x As Integer = 0", "Y = 2". Por exemplo. Você vê que o próprio compilador vai mandar um erro dizendo que "Y" não foi declarado. Se eu, inclusive, insistir nisso e recompilar a solução. Ele vai fatalmente me dar um erro dizendo: "Y não foi declarado".

Então, erros ou exceções de compilação, a gente consegue, no momento em que estamos desenvolvendo o software, corrigir; porque o software nunca vai ser entregue, eu nunca vou conseguir criar um executável enquanto os meus erros de compilação não forem resolvidos.

As exceções são o que nós chamamos de erros de execução. Alguns, como falei, esperados. Outros, inesperados. Vejamos essa aplicação simples que eu coloquei aqui na tela. Ela é uma aplicação "WINDOWS FORMS", onde eu vou pegar o número 10 e dividir por zero.

Bem, todo mundo que sabe matemática sabe que 10 não pode ser dividido por 0. Eu vou clicar aqui. Eu tenho dois botões. Os dois botões vão fazer essa divisão, mas o botão da esquerda vai me mostrar uma exceção não esperada, e que eu não estou tratando.

Ou seja, o próprio compilador do "VISUALBASIC", a própria máquina do "FRAMEWORK", o próprio "HARDWARE" que eu estou funcionando lá nos processadores, lá no nível de máquina, quando tentar dividir 10 por 0 vai retornar um erro.

Então, a minha aplicação vai mostrar esse problema. Eu vou clicar no primeiro botão e veja o que vai aparecer: "Ocorreu uma exceção sem tratamento no aplicativo". Se você clicar em continuar, o aplicativo ignorará esse erro e tentará continuar. Se clicar em encerrar, o aplicativo será encerrado. Operação aritmética resultou em um estouro".

Se eu for aqui em detalhes, ele me mostra várias coisas. Então, se eu clicar em "encerrar", ele fecha a aplicação eu não consigo mais executá-la. Eu vou agora abrir ela de novo. Então, ela está aqui. Eu vou abrir de novo, só que agora eu vou executar o botão da direita.

O botão da direita vai fazer a divisão da mesma maneira, mas veja o resultado: "Atenção, não podemos dividir 10 por 0". E olha que interessante. Se eu clicar no "Ok", a minha aplicação continua no ar. Eu clico de novo e ele vai repetir a mensagem sempre, mas a minha aplicação não é fechada.

O que eu fiz do lado esquerdo? Eu forcei um erro de execução sem tratamento. Deixei que o próprio compilador me devolvesse o problema. Já no botão da direita, eu fiz um erro com tratamento.

Todos esses erros, nós chamamos de exceções. O que nós vamos aprender neste treinamento são as diversas exceções que podem acontecer dentro do seu sistema, e como podemos tratá-las de forma mais amigável para que a transmissão desses erros, entre a interface e o usuário, seja mais amigável.

Inclusive, que possa dar uma orientação para os desenvolvedores efetuarem novas correções e transmitirem para os usuários, patches de correção ou novas versões do software, onde aqueles erros que foram tratados estejam mais contornáveis. Então, espero que vocês gostem bastante desse treinamento. Vamos seguindo. Um abraço.

Preparando o ambiente e conhecendo menus - Menus

Apesar de este curso ser sobre exceções dentro do Visual Basic, como também a gente está apresentando todos os nossos exemplos como projetos construídos em Windows Forms, também vamos apresentando alguns componentes novos para a construção de aplicativos para Windows. Então, antes de começar, realmente, a falar sobre o assunto deste curso, eu vou apresentar para vocês como eu construo no Windows Forms menus.

Vamos então abrir o nosso Visual Studio e vamos criar uma solução nova. O diretório, eu vou sempre manter o meu diretório padrão onde eu estou criando todas as minhas soluções, e essa solução eu vou chamar de Excecoes. E aqui, o nome do projeto, também vou criar com o nome Excecoes, certificando que eu estou usando o Visual Basic, Windows Forms, aplicativo do Windows Forms.

Está aqui o meu formulário principal desse meu projeto para essa minha nova solução, e eu vou fazer aquilo que eu sempre faço em todos os novos formulários que eu crio, colocando um Label e atualizando o título do formulário, de tal maneira que a gente possa identificar qual é a janela que estamos analisando.

Então, o formulário, eu vou primeiro renomeá-lo para Frm_Principal, vou adicionar um componente Label, indo na Caixa de Ferramentas... Então, como eu falei, a minha ideia é construir um menu no topo da minha janela. Então, eu vou arrastar esse Label um pouquinho para baixo, eu vou em Caixa de Ferramentas e eu procuro na letra M, MenuStrip. Eu vou arrastá-lo para cá...

Note que eu escrevi uma área onde eu vou construir o meu menu. Aqui ao lado, nas Propriedades, eu vou chamar esse componente MenuStrip de Mnu_Principal, e eu posso adicionar todos os itens do menu graficamente. Então, por exemplo, eu vou clicar aqui... Eu posso colocar aqui, por exemplo, Arquivo...

Se eu digitar ao lado, eu vou colocar, por exemplo, Editar... E se eu vier aqui ao lado, eu posso colocar, por exemplo, Sair... Sair não, por exemplo, Ajuda. Eu montei um menu horizontal. Clicando sobre um dos menus, eu posso colocar, por exemplo, Novo, Abrir, Salvar, Sair. No Editar, eu posso colocar Buscar, Copiar, por exemplo, Recortar, Colar... E no Ajuda, por exemplo, OnLine e Sobre.

Então, note que se eu clicar aqui, eu tenho o meu menu montado. Se eu clicar, por exemplo, em Abrir, eu posso colocar um submenu aqui, Arquivo Texto, por exemplo, ou Planilha. Então, eu vou ter a navegação, se eu clicar em Abrir, eu vou ter as opções. Se eu salvar e executar, eu tenho a minha janela, e se eu vier em Arquivo, Abrir, eu tenho o meu menu... Editar, Sobre, ou seja, eu tenho o menu da janela montado.

Eu posso associar aos itens do menu uma tecla de atalho, que no inglês são Hotkeys, ou seja, Ctrl + A para abrir, Ctrl + C para copiar, e assim por diante. Então, como é que eu faço isso? Note que se eu clicar sobre essa área do menu onde estava o menu em branco, eu estou vendo um objeto Mnu_Principal. Mas se eu, por acaso, por exemplo, vier em Editar e clicar no item Copiar, o que eu vejo aqui é o componente CopiarToolStripMenuItem, ou seja, é a opção do clique em Copiar.

E eu, por exemplo, tenho aqui ShortcutKeys. Eu posso chegar aqui e dizer, por exemplo, Ctrl, e eu posso escolher a tecla, por exemplo, a letra C, Ctrl + C. Então, note que ele escreveu aqui ao lado, o Ctrl + C. No Recortar, por exemplo, eu cliquei no Recortar, eu posso vir aqui e selecionar o Ctrl, por exemplo, X. Então, eu estou vendo o Ctrl + X.

E como é que essa ação ocorre? Note o seguinte, se eu vier no Copiar e dar um duplo clique, eu entro neste evento que representa o clique daquela ação. Então, por exemplo, eu vou colocar uma MsgBox, "Escolhi a opção Copiar", eu vou ver uma janela com esse texto. Eu vou salvar, vou executar...

Então, se eu vier no Editar, Copiar, então, eu vou clicar na opção Copiar, eu vejo a minha MsgBox "Escolhi a opção Copiar". Mas eu posso também, clicando em Editar, se eu der o meu Ctrl + C, que é a tecla de atalho, note que eu também vejo a janela "Escolhi a opção Copiar". Então, é dessa maneira, por exemplo, que eu consigo criar teclas de atalho no meu menu.

Posso também inserir imagens, como se fossem ícones na minha opção de menu. Então, por exemplo, eu vou vir na minha internet, vou abrir uma sessão de browser, e vou escolher um ícone qualquer na internet, por exemplo, icons copy, download icons copy. Então, eu tenho uma série de...

Isso aqui são ícones de copiar e colar... Por exemplo, vou escolher um qualquer, não importa. Vocês procurem o que vocês quiserem. Eu vou pegar esse aqui, por exemplo. E eu vou fazer o download dele, por exemplo, 16x16. Fiz o download da imagem, vou procurá-la e vou recortá-la do meu diretório de downloads e vou colocar num diretório mais fácil de achar, que é justamente o diretório onde eu estou codificando a minha aplicação.

Então, eu vou criar um só uma pasta chamada Imagens, e eu vou salvar essa imagem aqui. Vou copiar esse diretório onde eu salvei a minha imagem... Então, voltando para a nossa aplicação, se eu, por acaso, clicar sobre a opção Copiar, eu tenho mais uma propriedade que é a Image. Então, se eu selecionar Image, eu posso importar uma imagem que está local na minha máquina ou usar o que nós chamamos de Recursos de Projeto.

Eu ainda não falei sobre o que significa esse Arquivo de recursos de projeto, mas a gente vai falar em outras oportunidades. Por enquanto, eu vou clicar em Recurso local, vou clicar em Importar, e vou naquele meu diretório selecionar essa imagem. Eu vou dar OK e note que a imagem apareceu no menu, bem no canto esquerdo do menu.

Então, eu vou salvar, vou iniciar... Então, aqui eu tenho a minha aplicação... Se eu clicar, note que eu tenho a opção Copiar, do lado esquerdo a imagem e do lado direito a tecla de atalho. Então, quando você for construir uma aplicação realmente profissional usando o Windows Forms, a primeira coisa que você até faz é montar o seu menu com a organização correta, com as imagens corretas para ajudar o seu usuário, bem como as teclas de atalho, caso você queira que a sua opção as tenha.

Então, era isso que eu queria falar um pouquinho para vocês sobre a parte de menus no Windows Forms.

Preparando o ambiente e conhecendo menus - Preparando o projeto

Então, vamos criar o projeto nós vamos usar para os exemplos deste treinamento. É o seguinte, nós vamos criar um projeto novo, com uma tela principal, igual como fazemos sempre quando iniciamos um novo capítulo ou um novo assunto no nosso treinamento de Visual Basic .NET. Só que nós vamos criar duas classes.

A primeira classe vai ser a classe Cliente que vai ter as propriedades mostradas aqui em cima: CPF, onde eu vou, explicitamente, executar os operadores de Get e Set, e a propriedade Nome e a propriedade Profissão do cliente que também serão strings, só que essas usarão a propriedade Get e Set implícitas.

Depois, nós vamos criar uma outra classe chamada Conta Corrente, que vai ter primeiro uma propriedade chamada Titular, que vai ser do tipo Cliente; o número da conta corrente que vai ser inteiro; vamos ter uma propriedade compartilhada que vai ser o TotalDeContasCriadas, que também será inteiro.

Teremos mais duas propriedades que serão criadas também usando a programação Get e Set de forma explícita: Agência e Saldo, sendo que nas duas, se eu passar para o número da agência ou para o valor do saldo, valores menores do que zero, eu gravarei na propriedade o valor zero. Claro, no caso de saldo, já vai ter uma inicialização de R$ 100,00 para todo saldo de classes que forem instanciadas.

A Conta Corrente vai ter um construtor, onde eu vou passar Agencia e Numero, ou seja, toda vez que eu for criar, instanciar uma nova classe, eu sou obrigado a colocar Agencia e Numero, e é claro, nesse construtor, eu vou fazer sempre a soma daquela propriedade compartilhada TotalDeContasCriadas. E eu vou ter alguns métodos nessa classe Conta Corrente...

O método Sacar, que vai receber o valor que vai fazer o saque, e se o valor for maior do que o saldo, eu retorno falso... Se não, efetuo o saque e retorno true, ou verdadeiro.

Também vou ter a função Transferir, que eu vou passar como parâmetro o valor a ser transferido e a conta corrente que vai receber a transferência... Também testo se o valor a ser transferido for maior do que o saldo existente na conta origem, eu não faço as transferências... Se não, eu faço a transferência e efetuo o depósito lá na conta destino.

E, finalmente, o método Depositar, que simplesmente pega um valor e soma ao saldo atual. Então, deixe-me voltar para cima... Essa vai ser a primeira classe que nós vamos criar... Então, vamos lá no Visual Studio agora e criar um novo projeto e implementar essas classes.

Então, vou para o meu Visual Studio, onde eu tenho o projeto que eu mostrei no vídeo anterior, mostrando o menu... E aqui mesmo, eu vou no botão direito do mouse sobre a minha solução, vou selecionar Adicionar, Novo Projeto e o nome do Projeto vai ser ByteBank.

Como todo projeto, a gente vai renomear o formulário principal para Frm_Principal... Vou alterar um pouco o tamanho do formulário, ficar um pouquinho menor...

Então, no formulário, a gente coloca a propriedade StartPosition para CenterScreen. E nesse formulário, vou adicionar um componente Label... Eu vou chamar esse componente Label de Lbl_Principal, vou deixá-lo um pouquinho mais abaixo da janela, porque aqui em cima vai entrar um menu, mas eu não vou colocar o menu agora...

E aí, botão direito do mouse sobre o formulário, Exibir Código-fonte... No ComboBox do meio, eu mantenho o Frm_Principal, e aqui ao lado, eu peço para escrever um método New. E abaixo do InitializeComponent, eu vou colocar o Me.Text = "Projeto ByteBank", por exemplo, e o Lbl_Principal também vai se chamar = "Projeto ByteBank"... Lbl_Principal.Text, é o texto do Label.

Botão direito do mouse sobre o nome do projeto ByteBank, vamos selecionar Definir como Projeto de Inicialização. Vou salvar e eu vou executar para ver se vai abrir a minha janelinha do projeto ByteBank... Abriu, então, estou no caminho certo. Agora, então, vamos criar as classes.

Usando aquela forma de organização das classes que nós vimos no curso de Programação Orientada ao Objeto Avançado, de criar subdiretórios, eu vou dar botão direito do mouse sobre o nome do meu projeto, e vou selecionar Adicionar, Nova Pasta, e essa pasta eu vou chamá-la de Classes. Dentro da pasta Classes, eu vou, inicialmente, criar a classe Cliente com essas propriedades. Então, vamos lá...

Botão direito do mouse, Adicionar, Classe... E eu vou chamar a classe de Cliente. Então, vamos lá. Primeiro, eu vou criar o namespace, que vai se chamar Classes, com "C" maiúsculo... E eu vou colocar a declaração da classe dentro do namespace. Então, vamos olhar aqui.

Primeiro, eu vou criar a propriedade CPF, que vai usar os operadores Get e Set de forma explícita. Então, vamos lá... Private m_cpf As String, quando eu uso de forma explícita. eu sempre declaro uma variável private, que é a que vai, realmente, ter a propriedade armazenada.

E o Get e Set vão ser a casca de segurança entre a variável que instanciou o objeto e o valor da propriedade. Nós vimos isso lá no curso de Introdução à Programação Orientada ao Objeto, que isso é uma forma de proteger o valor da propriedade dentro da classe. Então, vamos lá?

Public Property, o nome da propriedade vai ser cpf As String, End Property... E dentro do Public Property, eu preciso colocar um Get e um Set. O Get, quando eu buscar a propriedade, eu vou retornar o valor da variável privada, e o Set, quando eu quiser gravar um dado na propriedade, a variável privada recebe o valor que eu estou passando para a classe.

E temos mais duas propriedades, essas sim, terão o Get e Set implícitos: Nome e Profissão, ambas string. Public Property nome As String e Public Property profissao As String. Vamos colocar dentro da classe o nosso #Region, e eu vou chamar essa region de "PROPERTIES"... Não, "PROPRIEDADES".

Às vezes, a gente se confunde, escreve as coisas em inglês misturado com português... "PROPRIEDADES". E dentro, eu vou colocar a declaração das propriedades.

Essa classe não vai ter construtor, essa classe não vai ter método. Então, pronto, a nossa classe Cliente está criada. Agora, vamos para a classe Conta Corrente. Então, eu vou primeiro na minha apresentação... Vou olhar, inicialmente, a especificação das propriedades de Conta Corrente. Vai ter Titular, Numero, TotalDeContasCriadas, Agência e Saldo...

Vou voltar para o meu Visual Studio, botão direito do mouse sobre o diretório Classes, Adicionar, Classe, e eu vou chamar de ContaCorrente. Vamos para o namespace, NameSpace Classes, e eu vou colocar a declaração da classe dentro do namespace... Já vou escrever aqui dentro o #Region "PROPRIEDADES", e aqui dentro, eu vou começar a criar as propriedades. Então, a primeira propriedade...

Deixe-me minimizar essa barra... Titular, que é do tipo Cliente... Public Property titular As Cliente, a minha primeira propriedade. Numero vai ser um inteiro, é o número da conta corrente desse meu titular. Então, Public Property numero As Interger, número inteiro. Agora, nós temos uma propriedade compartilhada que vai contar o número de contas correntes que são criadas.

Essa propriedade compartilhada vai ser um incremento que vai valer para todas as classes ContaCorrente que vão ser instanciadas... Vimos isso lá no nosso curso de Introdução à Programação Orientada ao Objeto. [12:44] Então, vamos criá-la aqui. Private Shared, e vamos ter aqui, m_TotalDeContasCriadas, vai ser do tipo inteiro (As Interger). E vamos agora, colocar o Get explicitamente. Propriedade compartilhada não tem o Set porque ela é ReadOnly.

Public Shared ReadOnly Property TotalDeContasCriadas As Integer... Até errei aqui, é Contas... m_TotalDeContasCriadas... TotalDeContasCriadas. E aqui, eu vou colocar o meu End Property.... E como é uma variável compartilhada, só tem o Get, e eu dou o meu Return m_ TotalDeContasCriadas.

Então, essa minha propriedade compartilhada já foi criada. Temos agora, Agência e Saldo, vão ser os operadores Get e Set explícitos, e vou fazer aquela regrinha, que se eu passar o valor Z menor que zero, o que eu vou gravar na classe é o zero. Vamos lá... Private Property... Não. Private não precisa da palavra Property, porque é uma variável normal. Então, vamos lá...

Private m_agencia As Interger. Depois, nós vamos ter o Public Property agencia As Interger, End Property... E aqui, eu vou ter o meu Get e eu vou ter o meu Set. No Get, Return m_agencia... No Set é que eu vou fazer o teste, se (if) o valor que eu passar para a propriedade da classe, value <= 0, então (then), o que eu vou gravar na variável privada que representa essa propriedade será o zero, m_agencia = 0...

Else m_agencia recebe (=) o valor (value) que eu passei para a classe. E nós temos o Saldo, também a mesma coisa... Só que Saldo é uma variável do tipo Double, e ele também será sempre inicializado com o valor 100, quando a classe for instanciada. Então, para a gente não precisar digitar tudo, eu vou copiar esse bloco, vou colar aqui embaixo...

Só que em vez de agencia, eu vou chamar de saldo, e em vez de Interger, Double... Na verdade, eu teria que copiar também a variável privada e colocá-la aqui... Só que em vez de ser m_agencia, vai ser m_saldo, vai ser um Double, e vamos inicializá-lo com o valor 100. O Return é m_saldo, o value é Double...

E a variável m_saldo, também vou usar aqui. Deixe-me só separar aqui para a gente poder ver mais claramente os blocos de comando... E pronto, já tenho as propriedades da minha classe ContaCorrente, propriedades dessas que foram já codificadas e criadas. Vamos voltar para a especificação...

Então, agora vou fazer um construtor, onde eu vou passar nesse construtor a Agencia e o Numero da conta, porque são obrigatórios... E lá, eu vou fazer o incremento da variável compartilhada, que é o TotalDeContasCriadas, porque sempre que eu instanciar uma classe, eu tenho que incrementar esse contador.

Então, eu vou para o meu Visual Studio, vou criar uma outra #Region, vou chamá-la de "CONSTRUTORES"... E eu tenho que colocar um Public SUB NEW, onde eu vou passar como parâmetro uma agência (_Agencia As Interger, ...), e eu vou passar também o número da conta (..., _numero As Interger).

Nesse construtor, a agência foi declarada de forma explícita. Então, quem tem que receber o valor da agência é a variável privada m_agencia. Então, eu vou ter que m_agencia recebe (=) _Agencia. Número... como o número não foi declarado de forma explícita, o Get e Set está implícito na Public Property, eu igualo direto ao valor da propriedade _numero... numero recebe (=) _numero.

Depois, eu tenho que fazer o incremento da variável Shared m_TotalDeContasCriadas, vou até dar um Crtl + C... Vou dar aqui um Ctrl + V... E ele vai ter sempre que ter o incremento de 1 (+= 1). Então, eu tenho o meu construtor para quando eu for instanciar a classe ContaCorrente, onde eu passo a agência e o número, e faço a soma de 1, o incremento para a variável compartilhada TotalDeContasCriadas.

Vamos voltar, então, na especificação. Vamos agora fazer a nossa função Sacar, que vai receber como parâmetro o valor que deve ser sacado, e se claro, o valor for menor que o saldo, retorna falso... Se for maior do que o saldo, efetua o saque e retorna verdadeiro. Então, vamos no nosso código acrescentar #Region "METODOS". Então, vamos lá.

Public Sacar, e vou passar como parâmetro o quê? O valor a ser sacado (ValorSacado As Double). E este método vai ser uma função (Function) e ela vai retornar um Boolean (As Boolean), um valor lógico. Eu vou testar... Eu vou ter uma variável (Dim) que vai se chamar vRetorno As Boolean, que, por enquanto, não vale nada...

Então, se (if) o valor do saldo (m_saldo), eu estou usando m_saldo porque é uma variável cujos Get e Set foram declarados explicitamente. Então, eu tenho que usar a variável privada quando eu quero me referenciar ao valor da propriedade. Então, se (if) m_saldo < ValorSacado then... Então, a minha variável vRetorno = false. Se não (else), vRetorno = true, e eu faço o quê? Faço o saque, m_saldo -= ValorSacado.

Feito isso, eu retorno o nosso valor (Return = vRetorno). Então, a função Sacar está implementada. Vamos para a nossa implementação. Eu vou começar por baixo, eu vou agora fazer o método Depositar.

Ele é um método porque não vai retornar nada, o valor que eu colocar lá, eu vou depositar. Então, vamos colocar um Public Sub Depositar, passo como parâmetro (ValorDepositado As Double), ele não retorna nada, e eu vou colocar m_saldo += ValorDepositado.

Agora, finalmente, vamos fazer o último método, que é o método de transferência (Transferir). Também vai ser uma função que vai retornar verdadeiro ou falso, se eu conseguir ou não fazer a transferência. Eu recebo como parâmetro o valor vai ser transferido e a conta corrente, que será a conta corrente destino.

Public Function Transferir, eu vou receber, então, o (ValorTransferencia As Double, ...), e recebo também como parâmetro a conta corrente destino (..., ContaDestino As ContaCorrente), que é do tipo ContaCorrente, e isso vai retornar um Boolean (As Boolean). Vou colocar aqui um underscore e enter para mostrar dentro da tela a declaração dessa função, e vamos lá...

Também vou criar uma variável Dim vRetorno, que vai ser lógica (As Boolean)... Vou fazer o teste, se (if) eu tenho saldo para transferir (m_saldo < ValorTransferencia then)... Então, se o saldo for menor do que o valor a ser transferido, não posso fazer a transferência. Return... Na verdade, é vRetorno = false. Se não (else), como é uma transferência, eu vou tirar do saldo da conta atual e depositar na conta destino...

Então, m_saldo -= ValorTransferido, e eu já tenho o método Depositar, então, vou pegar a ContaDestino.Depositar e... Na verdade, aqui não é ValorTransferido, é ValorTransferencia, e eu passo como parâmetro o valor a ser depositado. E o vRetorno passa a ser true (vRetorno = true). E aqui, finalmente, Return True... Não, desculpe, Return vRetorno.

Pronto, terminei, então, a minha classe ContaCorrente. Na verdade, terminei a modelagem das duas classes, conforme a especificação que eu mostrei para vocês.

Sobre o curso VB.NET com Windows Forms Parte 4: Entendendo exceções

O curso VB.NET com Windows Forms Parte 4: Entendendo exceções possui 414 minutos de vídeos, em um total de 75 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1206 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?

Acesso completo por 1 ano

Estude 24h/dia onde e quando quiser

Novos cursos todas as semanas