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

Xiaomi 12 Ultra poderá ter câmera de incríveis 200MP

Um recente vazamento de dados ocorrido na rede social Weibo mostrou que a Xiaomi estaria trabalhando em um novo modelo top de linha, o Xiaomi 12 Ultra, com um sensor de poderosíssimos 200MP de resolução. Rumores já haviam sido trazidos à tona sobre essa possibilidade, inclusive com a suspeita de...

Ler Notícia Completa

Google Pixel 5a está superaquecendo durante as gravações de vídeos

Os boatos iniciais de que o novo celular da Google, o Pixel 5a, superaquecia, parece que se confirmaram. O aparelho é capaz de gravar vídeos em resolução 4K e com taxa de 60 frames por segundo, porém, superaquece a tal ponto que emite mensagem de alerta ao usuário, solicitando o desligamento do...

Ler Notícia Completa

Android 12 permitirá controle do celular através de expressões faciais

A nova versão do sistema operacional do Google, o Android 12, promete trazer uma interessante funcionalidade. Chamada de “Camera Switches”, a função faz parte do conjunto de aplicativos para acessibilidade e permite que, utilizando a câmera frontal do aparelho, o usuário possa executar uma série...

Ler Notícia Completa

Xiaomi revela detalhes e aparelhos que receberão a MIUI 12.5

A Xiaomi divulgou os detalhes da sua nova interface, a MIUI 12.5, que promete trazer correção para mais de 280 problemas atualmente conhecidos pela empresa. A ideia é que a nova versão esteja disponível até o final de agosto em pelo menos 12 modelos de smartphones da Xiaomi. Veja abaixo a rela...

Ler Notícia Completa

Samsung Galaxy F22

Lançado em julho de 2021, o Samsung Galaxy F22 é um aparelho que merece ser considerado por você que não pode gastar muito e não precisa de configurações de hardware top de linha, mas quer um aparelho de boa qualidade. O aparelho vem com processador octa-core (2 x 2Ghz + 6 x 1.8Ghz), opções com...

Ler Notícia Completa

Xiaomi Redmi K40 Gaming

O Redmi K40 Gaming ou Redmi K40 Gaming Edition chegou e ele impõe respeito! Como o próprio nome sugere, ele é voltado ao público gamer, com uma configuração capaz de rodar, sem grandes dificuldades, todos os jogos lançados até então. Com processador octa-core (1 x 3GHz + 3 x 2.6GHz + 4 x 2.0GHz)...

Ler Notícia Completa

Galaxy M42 5G

O Samsung Galaxy M42 5G promete chamar a atenção dentre os celulares intermediários. O aparelho conta com processador octa-core (2 x 2.2GHz + 6 x 1.7Ghz), possui versões com 6 ou 8Gb de memória RAM e 128Gb de armazenamento interno. Seu tamanho, de 6.6 polegadas, e sua tela de Super AMOLED, com...

Ler Notícia Completa

Realme 8 5G

Finalmente a Realme lançou o Realme 8 5G. O aparelho traz um conjunto interessante de componentes, com uma tela generosa de 6.5 polegadas de IPS LCD de 90Hz e resolução de 1080 x 2400 pixels (uma densidade de 405 pixels por polegada), qualidade que atende até aos usuários mais exigentes. O proce...

Ler Notícia Completa

Sony Xperia 10 III

Lançado em abril de 2021, o Sony Xperia 10 III chegou com um design extremamente elegante e configurações poderosas, principalmente no que se refere à gravação de vídeo. Seu conjunto de câmeras triplas (12, 8 e 8MP, sendo a última ultrawide) é capaz de gravar vídeos em 4K com 30fps e exce...

Ler Notícia Completa

Poco X3 GT

Anunciado no mês passado, o Poco X3 GT chegou e tem como alvo inicial o Oriente Médio e Ásia. O aparelho traz uma configuração interessante, com tela IPS LCD de 120Hz com HDR10 de 6.6 polegadas e resolução de 1080 x 2400 pixels. Ele possui três câmeras (64, 8(ultrawide) e 2MP) na parte...

Ler Notícia Completa

Procura por celulares 5G aumenta e preços caem

Um recente levantamento feito pelo Buscapé e o grupo Mosaico apontou que nos últimos 12 meses a procura por celulares 5G aumentou significativamente no Brasil. O aumento ultrapassa os 450% somente no primeiro semestre de 2021. Os preços, nesse mesmo período, sofreram uma redução de 15%. Modelos...

Ler Notícia Completa

Sem câmera aparente, vem aí o Mi Mix 4 da Xiaomi

Ao que tudo indica, o novo modelo top de linha da gigante chinesa Xiaomi será oficialmente anunciado na próxima terça-feira, dia 10/08. Embora a empresa não tenha divulgado detalhes técnicos do aparelho, acredita-se que ele terá câmera sob a tela, sem qualquer entalhe ou furo na parte frontal...

Ler Notícia Completa

Youtube pagará mais de 50 mil reais para criadores de conteúdo do Shorts

O Shorts, recentemente criado pelo Youtube, promete fazer pagamentos generosos a seus criadores de conteúdo. A empresa pretende pagar até US$ 100 milhões nos próximos 12 meses, tudo isso com o objetivo de impulsionar sua nova criação, que, como o próprio nome sugere, são vídeos curtos. As exigên

Ler Notícia Completa

O Windows 365 já chegou - Conheça os valores e detalhes da assinatura

O Windows 365 está disponível para ser assinado aqui no Brasil. Trata-se de uma plataforma que roda na nuvem e que permite a execução tanto do Windows 10 quanto do Windows 11, assim que este último for lançado oficialmente. A assinatura permitirá que você utilize o sistema operacional da Micro...

Ler Notícia Completa

Amazon divulga detalhes do Luna - Seu serviço de streaming de jogos

Na última terça-feira a Amazon deu detalhes sobre seu serviço de streaming de jogos, o Luna. Trata-se de um serviço por assinatura, semelhante ao que faz o Netflix com filmes e séries. Com ele os jogos são trazidos para o seu dispositivo, seja uma TV, computador ou mesmo o iPhone, através da Int...

Ler Notícia Completa

Windows 10 terá modificações no Menu Iniciar

A Microsoft liberou algumas imagens do novo Menu Iniciar, que deverá fazer parte do sistema operacional Windows 10 a partir de 2021. A primeira impressão é de que o objetivo da empresa é tornar o menu mais integrado ao restante da área de trabalho, através de blocos translúcidos, as “Live Tiles”...

Ler Notícia Completa

Alemanha autoriza primeiros testes de vacina contra Covid-19 em humanos

A Alemanha é mais um país a entrar na fase de testes de uma vacina contra a Covid-19 com humanos. O Instituto Paul Ehrlich, que opera como a agência regulatória federal alemã para vacinas e biomedicina, anunciou nesta quarta-feira (22) a autorização para o início dos estudos clínicos, que devem...

Ler Notícia Completa

Dispositivo de apenas 5 dólares detecta o HIV em poucos minutos

Com custo de apenas US$ 5, o pequeno aparelho permite ao usuário fazer o próprio diagnóstico O designer britânico Hans Ramzan criou um dispositivo capaz de identificar o HIV em questão de minutos. O aparelho é de uso simples, barato, e o teste pode ser feito em casa, ajudando na identifcação rá...

Ler Notícia Completa

PlayStation 5 consumirá menos energia que modelos anteriores

Console vai incluir opção que poupa energia no modo de espera O PlayStation 5 vai consumir consideravelmente menos energia que seu antecessor, PlayStation 4. Em publicação no seu blog, a Sony, através do presidente e CEO Jim Ryan, anunciou que está trabalhando com as Nações Unidas na iniciativa...

Ler Notícia Completa

Novo processador AMD tem desempenho de um Core i9 pela metade do preço

Enquanto o Ryzen 9 3900X custa US$ 499, o Intel Core i9 9920X sai por US$ 1189; ambos são de alto desempenho para desktop A fabricante AMD inaugurou nesta segunda-feira, 27, a Computex 2019, uma das maiores feiras de hardware de computador do mundo, com o anúncio de uma nova geração de processado...

Ler Notícia Completa

5G vai revolucionar a indústria

Os meses que antecederam a virada do ano testemunharam os primeiros passos de uma mudança sem precedentes, mas pouca gente percebeu o impacto que ela realmente terá: a tecnologia móvel de quinta geração, ou 5G, deixou os laboratórios e se tornou disponível para o mercado consumidor. A Ericsson...

Ler Notícia Completa

Carros autônomos da Waymo estão sendo atacando nas ruas dos EUA

De acordo com o que reportou o periódico norte-americano Arizona Central, carros autônomos da Waymo estão sendo atacados por moradores de cidades onde esses veículos estão em teste. Boa parte dos casos estão acontecendo em Chandler, onde um morador apontou uma arma para o motorista de segurança...

Ler Notícia Completa

Galaxy S10 Plus terá até 5 câmeras

Mesmo faltando praticamente dois meses para o lançamento oficial do novo Galaxy S10, já sabemos quase tudo sobre o aparelho. Na segunda-feira, ficamos sabendo que o aparelho terá pelo menos três variantes, e que a versão Plus será anunciada com duas câmeras frontais, assim como o Google Pixel 3...

Ler Notícia Completa

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

Você sabia?

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

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.

Ajude o Contém Bits com um cafezinho!

Se você gostou do artigo, se ele lhe foi útil de alguma maneira e você quiser ajudar o Contém Bits, saiba que é simples, fácil e rápido. Basta clicar na imagem do PayPal (ou no cafezinho) e seguir as instruções, em ambiente seguro e com o respaldo do Paypal. Eu agradeço muito! :)


Você gostará destes vídeos!