Neste tópico vamos aprender como passar um valor de um form para outro. Vou aproveitar nossa aplicação de cadastro de clientes para demonstrar, mas se você estiver apenas procurando uma forma de transferir uma variável para outro form e não está acompanhando o minicurso desde o início, não tem problema. O exemplo também lhe servirá e a forma de fazer essa "passagem" da informação é muito simples.
Bem, agora vamos trabalhar com a alteração de dados de clientes já cadastrados em nossa pequena aplicação. A ideia será reaproveitar o formulário de cadastro de clientes, ou seja, o frmCadastroCliente, para efetuar essa alteração, então, para isso veremos uma técnica bastante interessante, que é a passagem de parâmetro (ou de uma variável) para outro formulário. O processo é muito simples e para isso faremos uma sobrecarga do método construtor do formulário de cadastro e, de acordo com o parâmetro passado, ele se comportará como um formulário de cadastro ou de atualização dos dados.
Antes de chegarmos a estes pontos, vamos preparar o código já pronto. Como primeiro passo vamos criar, no formulário de Cadastro de Clientes, portanto o frmCadastroCliente, um método para popular o ComboBox de Estados, já que até o momento o código responsável por isso está colocado no método Load do formulário de cadastro.
Esse trecho de código ficará assim:
A chamada para esse novo método criado será feita dentro do método construtor, logo abaixo do InitializeComponent(), da seguinte forma:
Agora vamos abrir o formulário de Alteração de Clientes e vamos adicionar um DataGridView a ele.
Notem que já o redimensionei para ocupar quase todo o espaço disponível no formulário e já desmarquei os 3 checkboxes que por padrão são selecionados. Também já o renomeei para dtgBuscaParaRemocao e alterei seu fundo para a cor "LightCyan", para ficar igual ao DataGridView que usamos no formulário de remoção de clientes.
É importante observar se as opções abaixo estão corretamente definidas com os seguintes valores:
AutoSizeColumnsMode = Fill
ReadOnly = True
AllowUserToAddRows = False
AllowUserToDeleteRows = False
ColumnHeaderHeightSizeMode = AutoSize
Ainda no formulário de Alteração de Clientes, vamos criar as duas variáveis que se tornarão objetos para conexão e manipulação dos dados do banco, que são:
private MySqlConnection minhaConexao;
private MySqlDataAdapter objAdapter;
Elas podem ficar acima do método construtor, como ilustra a figura abaixo:
Agora vamos inserir um botão "Alterar", conforme imagem abaixo:
Eu o chamei de "btnAlterar". Na sequência vamos inserir, dentro do evento Click do botão "Procurar", o código para exibição dos clientes encontrados no banco. Os comandos são exatamente iguais ao botão "Procurar" do formulário de Remoção, portanto teremos:
Com isso conseguiremos a exibição dos dados dentro do DataGridView. Agora precisamos pegar o email do cliente selecionado, exatamente como fizemos no formulário de Remoção, portanto, já no código do evento Click do botão "Alterar", colocaremos:
Nesse instante teremos, na variável “temporaria”, o email do cliente cujos dados queremos alterar. Agora faremos a parte interessante do código, que é a chamada ao formulário de Cadastro, porém através da sobrecarga do seu método construtor. Ainda dentro do do código do evento Click do botão "Alterar", abaixo do trecho demonstrado acima, colocaremos:
frmCadastroCliente fcc = new frmCadastroCliente(temporaria);
fcc.ShowDialog();
Comentando...
Agora vem outra parte muito importante do tópico, que é a sobrecarga em si. Vamos abrir o formulário de Cadastro de Cliente e fazer a seguinte alteração:
Agora que já criamos o método sobrecarregado, vamos fazer uma pausa para entedermos a dinâmica deste formulário depois da alteração. A ideia do processo de alteração de dados dos clientes é que o usuário acesse, através do menu, o formulário de alteração. Então ele faz uma busca pelo nome (ou parte dele) e dentro do DataGridView tenhamos os resultados encontrados. Na sequência ele seleciona o usuário cujos dados devem ser alterados e clica no botão "Alterar". Este botão chamará o formulário de cadastro de clientes, mas passará, como parâmetro, o email do cliente selecionado. Então, já dentro do formulário de cadastro, o sistema perceberá que foi passado um parâmetro e acionará o construtor sobrecarregado. A partir deste ponto todos os dados do cliente serão automaticamente inseridos em seus respectivos campos, para que o usuário possa alterá-los como desejar. Vamos, então, para essa reta final, que é a colocação dos dados nos campos do formulário.
O primeiro passo para isso será inserir uma variável do tipo MySQLAdapter, pois o formulário de Cadastro ainda não a tinha, já que para o cadastro simples não fazíamos uso dele. Agora teremos:
Como segundo passo iremos fazer um SELECT no banco, para resgatar todos os dados do cliente que terá seus dados alterados, e armazená-los em um DataTable. Nosso código do construtor sobrecarregado será assim:
A grande observação no código acima fica por conta da variável emailCliente, que é, na verdade, o email do cliente capturado no formulário anterior e passado como parâmetro para cá. Na sequência já criei o DataTable que receberá os dados dessa consulta no banco de dados.
A partir daqui a ideia é ler cada campo (coluna) do DataTable e colocar os dados encontrados nos campos do formulário. O código completo deste procedimento será:
Comentando, teremos:
Agora, ao executarmos a aplicação, entrarmos no formulário de alteração de dados, selecionarmos um cliente, e clicarmos no botão "Alterar", os dados já serão automaticamente inseridos no formulário de cadastro, como ilustra a imagem abaixo:
Eu destaquei o título e o botão "Salvar", como duas falhas, afinal de contas, nesse instante o formulário não está atuando como cadastro de clientes, mas sim como formulário de alteração de dados. O botão também não deve ser o "Salvar", mas sim "Atualizar". Vejam agora mais dois macetes para corrigirmos estas pequenas falhas. Primeiramente vamos trabalhar o título, fazendo a alteração dinâmica do seu texto. Para isso, ainda dentro do construtor sobrecarregado, após o código responsável pelo preenchimento dos campos TextBox, vamos inserir o comando “this.Text”, conforme ilustra a figura abaixo:
Agora vamos executar e ver a diferença:
Notem que o título do formulário foi dinamicamente alterado para “Alteração de Dados”.
Agora vamos nos concentrar no botão. Aqui a estratégia será diferente, pois até poderíamos alterar a sua propriedade Text para o valor "Atualizar", no entanto o código associado a este botão é adequado para o salvamento no banco e não para uma atualização. A ideia aqui será a seguinte: como primeiro passo vamos inserir um novo botão exatamente em cima do botão "Salvar", então vamos chamá-lo de "btnAtualizar" e definirmos seu texto para o valor "Atualizar", conforma ilustra a imagem abaixo:
No exemplo acima eu o coloquei levemente deslocado em relação ao botão "Salvar", apenas para que fique claro que um está sobre o outro, mas vocês podem colocá-lo exatamente sobre o botão inserido anteriormente.
O macete agora é definirmos, para este novo botão, que chamamos de "btnAtualizar", a propriedade Visible com valor False.
A ideia é que o formulário seja aberto, por padrão, com o botão de "Salvar" sendo exibido e o botão de "Atualizar" oculto. No entanto, quando o método construtor sobrecarregado for acionado, ou seja, quando quisermos, de fato, que o formulário atue como um atualizador de dados, vamos inverter essa lógica, tornando oculto o botão de "Salvar" e exibindo o botão de "Atualizar". Para isso adicionaremos o seguinte trecho, também dentro do método construtor sobrecarregado:
Estes comandos farão a inversão do botão que será exibido.
Agora, para encerrar, basta que façamos a inserção do código referente ao evento Click do btnAtualizar, mas para isso é preciso que nos atentemos para uma questão interessante, vejam: a chave primária da nossa tabela é o campo de email, por isso ele é sempre a referência para as operações de remoção de clientes. Agora usaremos esse mesmo campo como referência para a atualização de dados, mas pode acontecer do usuário querer atualizar o próprio email do cliente cadastrado. Nesse caso será necessário que saibamos o email cadastrado no banco ANTES da alteração, para que possamos usá-lo na propriedade WHERE do comando SQL. O procedimento para isso é muito simples. Vamos criar uma variável do tipo string que fará esse armazenamento. Uma sugestão de código é:
Aí está a variável criada e, faremos a inserção do email antigo nela dentro do método construtor sobrecarregado, conforme imagem abaixo:
Agora podemos prosseguir e finalizar o código do botão "Atualizar", que ficará da seguinte forma:
Como observações importantes deste código, ficam a concatenação da variável emailAntigo no comando MySQL, a alteração da mensagem de sucesso, que era de “Cliente gravado com sucesso!” e eu alterei para “Cliente atualizado com sucesso!” e vale destacar também que antes de cada concatenação dos TextBoxes, é necessário inserir as aspas simples, ou seja, é necessário envolver os TextBoxes em aspas simples. Sem isso o MySQL vai gerar uma exceção.
Agora vamos tentar atualizar os dados de algum cliente:
Aí está a confirmação de que os dados foram corretamente atualizados.
No entanto, antes de encerrarmos este tópico, tenho duas observações a fazer. A primeira é que, ao clicar no botão de OK da MessageBox de Sucesso, podemos perceber que o formulário frmAlteraCliente é novamente exibido em primeiro plano, mas os dados contidos no DataGridView não estão atualizados. Vamos corrigir isso. O primeiro passo é transformarmos o código que faz o preenchimento dos dados no DataGridView em um método separado, pois até este momento ele está “solto” dentro do bloco de código do evento Click do botão "Procurar".
Na prática pegaremos todo o código deste bloco e o colocaremos em uma função separada, como demonstra a imagem abaixo:
Resumindo, o antigo código do botão "Procurar" agora pertence a uma função separada e essa função é chamada quando o botão "Procurar" é clicado.
Agora, depois do comando que chama o método sobrecarregado no formulário de cadastro, chamaremos esse método de atualização do DataGridView novamente, vejam:
Agora, após o usuário efetuar as alterações e retornar ao formulário de Alteração de Clientes, automaticamente o DataGridView será atualizado.
A segunda observação é por conta dos dados exibidos no campo Data de Nascimento, pois além da data estão sendo exibidos outros caracteres, como ilustra a imagem abaixo:
Isso acontece devido a uma pequena falha do MySQL Server 5.1, que permite que campos do tipo Date ('0000-00-00') recebam dados no formato Datetime ('0000-00-00 00:00:00'). Na verdade eles não foram inseridos, mas ainda assim o MySQL os considera como vazios, por isso no momento do DataTable ser preenchido ele acaba recuperando os zeros referentes ao tempo.
Se o seu MySQL não apresentou essa pequena falha, ótimo, mas se apresentou, não se preocupe, pois a solução é muito simples. Vejam:
Inseri o retorno do DataTable em uma variável temporária e depois, com o método Substring, desprezei os caracteres vazios referentes ao tempo.
Agora, ao executar a aplicação, teremos o campo exibindo os dados corretamente:
Bem, com isso encerramos a parte de alteração de dados. Na sequência veremos uma etapa muito simples, praticamente sem qualquer novidade, que é como inserir máscara para o preenchimento da data, como obrigar o preenchimento de todos os campos e como impedir que o usuário clique no botão "Atualizar" sem ter selecionado nenhum usuário no DataGridView, o que por enquanto gera um erro.
HARDWARE
Entendendo o seu computador
O que há dentro do meu computador?
Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.
Você Sabia?
Mario em Donkey Kong
O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.
Playstation
O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.
PC com barulho?
Excesso de barulho dentro do seu gabinete, principalmente logo que você o liga, pode ser sintoma de problemas nas ventoinhas, que podem precisar ser limpas ou trocadas. Entre em contato com um técnico de sua confiança e verifique isso o quanto antes.
Street Fighter 2
Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.
Máquina de Pascal
A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.
Tomb Raider - O Filme
Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.
Asteroids
O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.
Pac Man
Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.
Final Fantasy
O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.
Space Invaders
O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.
Galaxy Game
As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.
Duck Hunt
Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".
Tetris
O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.
PDP-1
O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.
Mortal Kombat - O Filme
O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.
Nintendo Wii
Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!
Space Invaders
A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.
Ábaco
O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.
Computadores de 1,5 tonelada
Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.
Muitos aplicativos
Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.
Mario e seu bigode
O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.
Inteligência artificial
O primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.
ENIAC
O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.
Mega Man
A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.
Donkey Kong
A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.
Música tema do Blanka
Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.
Nintendo Entertainment System
O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.
River Raid
O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.
Final Fantasy X
O jogo Final Fantasy X para o Sony Playstation 2 vendeu, apenas no dia do seu lançamento, 1.455.732 cópias, estabelecendo um recorde de vendagem para as primeiras 24 horas de um game. Méritos da SquareSoft, que desenvolveu um excelente produto!
Ultima Online
Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras
Cuidados com o notebook
Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.
Civilization
A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.
Senhas
Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.
Recorde de patentes
A IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.