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:

Passando parâmetros para outro form

A chamada para esse novo método criado será feita dentro do método construtor, logo abaixo do InitializeComponent(), da seguinte forma:

Passando parâmetros para outro form

Agora vamos abrir o formulário de Alteração de Clientes e vamos adicionar um DataGridView a ele.

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

Agora vamos inserir um botão "Alterar", conforme imagem abaixo:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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...

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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á:

Passando parâmetros para outro form

Comentando, teremos:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

Agora vamos executar e ver a diferença:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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.

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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 é:

Passando parâmetros para outro form

Aí está a variável criada e, faremos a inserção do email antigo nela dentro do método construtor sobrecarregado, conforme imagem abaixo:

Passando parâmetros para outro form

Agora podemos prosseguir e finalizar o código do botão "Atualizar", que ficará da seguinte forma:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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:

Passando parâmetros para outro form

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.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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.


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!


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.


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.


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


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.


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.


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.


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.


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.


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.


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.


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!


O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


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.


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.


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.


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.


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".


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.


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.


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.


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.