Minicursos - C#

Passando Parâmetros Para Outros Forms


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 altera-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 armazena-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 chama-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 coloca-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 usa-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.



Algumas notícias

Robô que prepara hambúrgueres foi demitido no primeiro dia de trabalho e o motivo é surpreendente!

No início do mês, a rede de lanchonetes dos Estados Unidos CaliBurger começou a usar o robô chapeiro Flippy, desenvolvido pela Miso Robotics, para ajudar a produção de hambúrgueres. O objetivo é que o robô ficasse em uma das lojas de Pasadena, na Califórnia, para ajudar os humanos durante os mo...

Ler Notícia Completa

O que havia antes do Big Bang, segundo Stephen Hawking

Existia algo antes do começo de tudo? Para além da explicação teológica de que existia Deus, que satisfaria os religiosos, os especialistas buscam resolver o enigma que não deixa descansar as mentes que se dedicam a estudar o assunto. A ciência em geral aceita a teoria do Big Bang: o momento...

Ler Notícia Completa

Polícia chinesa já faz uso de óculos com reconhecimento facial

A polícia chinesa encontrou uma nova forma vigiar ainda mais os cidadãos. Conforme relata o The Wall Street Journal, os policiais locais estão usando óculos equipados com câmeras de reconhecimento facial para detectar criminosos que estejam tentando fugir principalmente pelas estações de trem. A...

Ler Notícia Completa

Facebook pede para usuários determinarem quais sites de notícias são confiáveis

Recentemente, o Facebook anunciou uma mudança radical no feed, que vai priorizar conteúdo que gere interação em vez de notícias. Agora a empresa revelou que também vai mexer em quais tipos de notícias aparecem no seu feed, valorizando as páginas que são consideradas mais confiáveis para combater...

Ler Notícia Completa

Bisbilhotar a vida dos outros no Facebook faz mal

Passar bastante tempo usando redes sociais é bom ou ruim? Esta é uma pergunta que vários especialistas já fizeram, e o Facebook, que é parte interessada no assunto, resolveu consultar a comunidade acadêmica norte-americana para responder a esse questionamento. De modo geral, a conclusão dos vári...

Ler Notícia Completa

Conheça a terapia que previne o HIV, que começará a ser oferecida no Brasil gratuitamente

A partir deste mês, o governo brasileiro irá disponibilizar no Sistema Único de Saúde (SUS) a terapia PrEP, que, por meio de um comprimido por dia, previne a infecção pelo HIV. O remédio, que tem efeitos colaterais, será reservado para casos específicos dentro de grupos de vulnerabilidade, como...

Ler Notícia Completa

Brecha no navegador Tor exibia os IPs reais dos usuários

O Tor é um navegador criado para navegação anônima, protegendo o usuário de ser identificado tanto para fins nobres (denúncias contra governos autoritários, por exemplo) quanto para fins criminosos (tráfico de drogas e pedofilia, por exemplo). Então, é compreensível que a comunidade tome um susto...

Ler Notícia Completa

Novo Firefox consome 30% menos RAM que o Google Chrome

A próxima versão do Firefox representa uma mudança tão drástica que a Mozilla decidiu ignorar sua numeração — que é 57 — e chamá-la de Firefox Quantum. O navegador foi todo redesenhado, tanto em termos de comportamento quanto no que se refere a design, e a Mozilla garante que ele é mais eficien...

Ler Notícia Completa

Ataques virtuais contra internet das coisas vem aumentando significativamente

O mundo está cada vez mais conectado. Se antes os smartphones permitiam acessar a internet, hoje os dispositivos conectados, incluindo TVs, geladeiras e carros, já fazem parte do dia a dia. No entanto, a internet das coisas está se tornando alvo dos cibercriminosos. Dados apresentados durante a...

Ler Notícia Completa

Volkswagen e Mercedes definem data para abolir combustíveis fósseis

Mais duas grandes montadoras anunciaram nesta semana seus planos para começar a abolir de vez os combustíveis fósseis. A Volkswagen revelou que vai oferecer versões elétricas de todos os seus carros a partir de 2030, enquanto a Mercedes-Benz fará o mesmo a partir de 2022. As duas se juntam a uma...

Ler Notícia Completa

PewDiePie se desculpa por vídeo com termo racista e diz: 'Eu sou um idiota'

Felix Kjellberg, o sueco conhecido no YouTube como "PewDiePie", voltou às manchetes nesta semana com uma nova polêmica, dessa vez por usar um termo racista durante uma transmissão ao vivo. Nesta terça-feira, 12, porém, o youtuber mais bem pago do mundo pediu desculpas. Tudo começou no último fim...

Ler Notícia Completa

9 invenções que você provavelmente não sabia que foram criadas ou descobertas por mulheres

Se pedirem para você citar inventores importantes, nomes como Thomas Edison, Alexander Graham Bell e Leonardo da Vinci provavelmente virão à sua mente. Mas e Mary Anderson? E Ann Tsukamoto? Já ouviu falar delas? Talvez não, mas certamente conhece seus feitos: Anderson patenteou o limpador de pa...

Ler Notícia Completa

Estudo da Intel mostra que as pessoas ainda têm medo dos veículos autônomos

A Intel fez um estudo para verificar como as pessoas estão reagindo e o quanto elas estão propensas a utilizar um veículo autônomo – e os últimos resultados revelaram que os humanos ainda têm medo dos carros que saem andando sem um motorista. De acordo com o “Intel Trust Interaction Study”...

Ler Notícia Completa

Inteligência Artificial está escrevendo o próximo livro de Game of Thrones

Não é mais novidade para ninguém que Game of Thrones é um fenômeno, mas o fato de a história não ter sido terminada nos livros que inspiraram a série causa uma certa apreensão em muita gente – e uma conclusão da saga deve sair só em 2019. Então, já que George R. R. Martin não dá indícios de que...

Ler Notícia Completa

Jovem com esclerose lateral amiotrófica armazena a própria voz para quando não conseguir mais falar

Lucy Lintott é a escocesa mais jovem já diagnosticada com esclerose lateral amiotrófica (ELA), a mesma doença degenerativa do físico britânico Stephen Hawking. Aos 22 anos, ela já tem parte da fala comprometida, processo que tende a se intensificar com o passar do tempo. "Ainda bem que existe...

Ler Notícia Completa

Como a Inteligência Artificial já está mudando salas de aula no Brasil e no mundo

Quando o estudante Anderson dos Santos Andrade, 16, faz o login na plataforma virtual da escola, tem diante de si seu plano de estudos: faltam seis vídeos de biologia para assistir e, depois, completar os exercícios online. Um dos questionários vem com a hashtag #cainaprova, então Anderson sabe...

Ler Notícia Completa

CEO que implantou chips no corpo de funcionários nos EUA diz que Brasil é o próximo mercado

Uma empresa de tecnologia de Wisconsin, nos Estados Unidos, causou furor ao anunciar que implantaria chips no corpo de seus funcionários para substituir crachás, chaves e a necessidade de senhas em computadores e equipamentos eletrônicos. Um mês após o anúncio, passado o frenesi inicial da impre...

Ler Notícia Completa

A pirataria de 'Game of Thrones' chegou a derrubar o Pirate Bay

Poucos eventos têm a capacidade de sacudir as estruturas da internet como novos episódios de “Game of Thrones”. Essa força foi sentida na pele pelos responsáveis pelo Pirate Bay, que não conseguiram manter o funcionamento do site normal. Os recordes de pirataria de “Game of Thrones” não são novi...

Ler Notícia Completa

Marcapassos desatualizados podem ser hackeados com facilidade

A FDA, espécie de "Anvisa dos Estados Unidos", enviou uma notificação nesta semana para os consumidores norte-americanos alertando que 465 mil marcapassos estão vulneráveis a ataques hackers e precisam de uma atualização de software. Conforme relata o Engadget, os dispositivos são da empresa de...

Ler Notícia Completa

China efetua a primeira transmissão 'à prova de hackers' com satélite quântico

No ano passado, a China levou ao espaço o primeiro satélite quântico do mundo visando criar uma nova era na transmissão de dados e informações. Hoje (10), o país asiático informou a realização da primeira transmissão bem sucedida com o equipamento. A comunicação entre o satélite e a Terra é à...

Ler Notícia Completa

YouTube agora mostra para os criadores de conteúdo o potencial de lucro de um vídeo

Muita gente que produz conteúdo para o YouTube depende bastante dos valores que pagam para veicular propagandas nesses vídeos, às vezes, fica um pouco perdida na hora de saber como as coisas vão funcionar realmente. Além dos problemas com vídeos que são tirados do ar sem o menor aviso ou motivo...

Ler Notícia Completa

Dormir é a mais nova habilidade do algoritmo de Inteligência artificial do Google!

Depois de dominar videogames e jogos de tabuleiro, a inteligência artificial do Google agora aprendeu um novo truque: dormir. Em um post feito no blog oficial do projeto DeepMind, o Google explicou como está fazendo para tornar a sua inteligência artificial mais humana. E, para isso, ela precisa...

Ler Notícia Completa

Conheça os detalhes da família Intel Core i9

Em maio deste ano, a Intel fez barulho revelando a sua linha de processadores Core i9 da série X, uma nova família para quem busca o máximo de desempenho para PCs. Até o momento, no entanto, a empresa havia ficado apenas na promessa, sem revelar os detalhes e especificações técnicas, mas isso mu...

Ler Notícia Completa

Cientistas 'excluem' doença cardíaca genética com edição de DNA

Cientistas conseguiram, pela primeira vez, remover de embriões um pedaço defeituoso de DNA, responsável por uma doença cardíaca genética fatal. A iniciativa bem-sucedida tem o potencial de, no futuro, prevenir estimados 10 mil problemas de saúde hereditários, que passam de geração a geração...

Ler Notícia Completa

Pesquisas afirmam que estamos perto da cura do resfriado

De acordo com cientistas da Universidade Edinburgh Napier, na Escócia, o tratamento poderia ser desenvolvido com base em peptídeos antimicrobianos, biomoléculas presentes naturalmente no sistema imunológico de seres humanos e animais. A equipe observou como essas substâncias aumentam a resposta...

Ler Notícia Completa

Programa de computador aprende a andar, correr e jogar futebol por conta própria

Já pensou um programa de computador aprender, sozinho, não apenas uma, mas três atividades distintas? O DeepLoco, como é chamado o software inteligente do qual vamos falar agora, conseguiu a proeza: ele tem a capacidade de aprender habilidades de locomoção por conta própria. O projeto foi criado...

Ler Notícia Completa

Droga experimental pode restaurar a memória após lesão cerebral

Uma nova pesquisa pode ser benéfica para o tratamento de lesões cerebrais traumáticas em seres humanos. Pesquisadores descobriram uma droga experimental que pode ajudar na restauração das memórias após uma lesão cerebral. Conforme relata o Engadget, em testes, a droga, conhecida como ISRIB, res...

Ler Notícia Completa

Android: vírus ameaça compartilhar histórico da internet com amigos da vítima

Em vez de criptografar arquivos, um novo ransomware que atinge smartphones com Android prejudica usuários de outra forma: ele ameaça expor o histórico de navegação na internet para os amigos da pessoa. O LeakerLocker, descoberto por pesquisadores da McAfee dentro de um app na Google Play Store...

Ler Notícia Completa

EUA dão mais um passo em direção a criação de leis sobre carros autônomos

A criação de uma regulamentação para os carros autônomos nos Estados Unidos está andando a passos largos: depois da criação de um rascunho da estrutura de leis, alguns representantes do governo norte-americano estão tentando efetivar a introdução de algumas leis sobre o assunto até o fim desta se...

Ler Notícia Completa

Pais jovens prefeririam ser cuidados por robôs na velhice, diz estudo

O IEEE, Instituto de Engenheiros Eletricistas e Eletrônicos, divulgou recentemente o estudo "Inteligência Artificial: Um Estudo sobre o Impacto da IA Sobre os Pais deste Milênio e Seus Filhos, a Geração Alfa". Dentre as informações levantadas pela pesquisa, destaca-se o fato de que as pessoas nas...

Ler Notícia Completa

Você sabia?

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

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.

Você gostará destes vídeos: