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



Notícias - Games

The King of Fighters XV já tem data para chegar

A SNK finalmente definiu uma data para lançamento do tão esperando The King Of Fighters XV. Segundo comunicado recente, o game de luta deve chegar em 17 de fevereiro de 2022 para os consoles Playstation 4, Playstation 5, Xbox Series X e S, além de PCs. O título contará com 39 personagens e mante...

Ler Notícia Completa

Phil Spencer aprovou o Steam Deck rodando o xCloud

O chefe da divisão XBOX e vice presidente da divisão de jogos da Microsoft, Phil Spencer, recebeu um Steam Deck e passou uma semana testando o dispositivo da Valve. Nas palavras dele: “trata-se de um dispositivo muito legal. É interessante ter os jogos disponíveis em qualquer lu...

Ler Notícia Completa

Playstation 4 já vendeu mais de 116 milhões de unidades

Embora a nova geração de consoles já tenha chegado definitivamente, o PS4 ainda vem registrando bons números e ultrapassou a marca dos 116 milhões de aparelhos vendidos ao redor do mundo. Possivelmente a confirmação da Sony de que títulos bastante esperados, como o novo God Of War e Horizon Forb...

Ler Notícia Completa

Nintendo Switch supera Xbox 360 e PS3 em número de unidades vendidas

Em números divulgados nesta quinta-feira (05) a Nintendo confirmou a quantia de 89 milhões de unidades vendidas do seu console Switch, deixando para trás o Playstation 3, com 87 milhões de unidades e o Xbox 360, com 80 milhões. O próximo console na lista para ser ultrapassado é o Wii, também da...

Ler Notícia Completa

Far Cry 5 está de graça para todas as plataformas por tempo limitado

A Ubisoft liberou o game Far Cry 5 entre os dias 5 e 9 de agosto para todas as plataformas (PS4, PS5, Xbox One, Series X e Series S, Google Stadia e PC). A notícia é ótima, claro, mas ao contrário do que normalmente acontece, o jogo só poderá ser jogado gratuitamente até o dia 9 de agos...

Ler Notícia Completa

Tudo sobre o Luna, o novo serviço de streaming de jogos da Apple

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

The Last of Us Part II já é o maior lançamento do ano dentre todos os consoles

[sem spoilers] The Last of Us Part II agradou a muitos e desagradou a poucos, mas o fato é que a expectativa pelo lançamento do jogo era gigante! A primeira versão do jogo ganhou todos os prêmios possíveis e é considerada por quem o jogou como, no mínimo, um excelente título. Era inevitável, por...

Ler Notícia Completa

BGS 2020 é adiada devido ao coronavírus

A Brasil Game Show deste ano será adiada para os mesmos dias de 2021. Em comunicado oficial feito ontem, a organização do evento esclareceu as razões para o adiamento e comunicou que a 13ª edição da maior feira de games da América Latina acontecerá entre os dias 8 e 12...

Ler Notícia Completa

Organização cancela Anime Japan 2020 por causa do coronavírus

Em meio à epidemia do novo coronavírus (COVID-19), a organização do Anime Japan 2020 cancelou o evento, que aconteceria entre 21 e 24 de março, a fim de evitar a proliferação do vírus. A feira, que traz diversas novidades sobre animes, não será adiada. Além disso, o evento Family Anime Festa 20...

Ler Notícia Completa

EA é condenada por uso de imagem de jogadores

O Sindicato de Atletas Profissionais do Estado de São Paulo (SAPESP) publicou um comunicado nesta sexta (1º) relatando o parecer favorável da Justiça contra a Electronic Arts pelo uso indevido de imagem de mais de 1.500 jogadores profissionais nos jogos da franquia FIFA. A sentença da juíza Mar...

Ler Notícia Completa

Sony demonstra um pouco do poder do PS5. Confira!

A Sony não vai realizar a tradicional coletiva de imprensa E3 deste ano, mas a companhia vem revelando gradualmente partes de seu console PlayStation de próxima geração. O PlayStation 5 é dito que vai suportar gráficos de 8K, áudio 3D, armazenamento SSD e retrocompatibilidade com os títulos exis...

Ler Notícia Completa

Cuidado! Alguns jogos para celular podem ouvir o que crianças assistem na TV

Essa não é a primeira vez que apps que ouvem o que os usuários estão fazendo, conversando ou mesmo assistindo na TV são expostos. Mas, desta vez, parece que alguns games mobile para crianças estão monitorando através do microfone de smartphones o que seu público está consumindo na televisão. As...

Ler Notícia Completa

Desenvolvedores de games cancelam prêmio de fundador da Atari após acusações de assédio

Nolan Bushnell fala abertamente sobre reuniões que empresa realizava em banheiras e outros comportamentos inapropriados com mulheres. Ele 'aplaude' decisão. Os organizadores da Conferência dos Desenvolvedores de Games (GDC, na sigla original) anunciaram nesta quarta-feira (31) a decisão de cance...

Ler Notícia Completa

Mercado de games bate novo recorde e fatura US$ 36 bilhões em 2017

A indústria de games norte-americana alcançou um recorde considerável em 2017: considerando vendas de consoles, acessórios, softwares e microtransações, o faturamento bruto desse segmento da economia foi de US$ 36 bilhões. É o maior número da história e que representa um crescimento de 18% em...

Ler Notícia Completa

Conheça o novo controle do Atari

Para aquecer o coração dos fãs mais nostálgicos, a Atari publicou no Facebook a primeira foto do controle do seu novo videogame, o Ataribox, que é essencialmente uma versão modernizada do periférico do icônico Atari 2600. O controle mantém a mesma estética do modelo original, mas agora sem fio e...

Ler Notícia Completa

R$ 8,5 milhões: esse é o salário de Faker, a maior estrela do League of Legends

Lee “Faker” Sang-hyeok é a maior lenda entre os fãs de League of Legends. Tricampeão mundial pela equipe SK Telecom T1, o sul-coreano inspira respeito na comunidade e admiração nos oponentes. Com a vitória do jogador no Mundial de 2016 e o fim da temporada oficial da Riot Games neste ano, a orga...

Ler Notícia Completa

Boa notícia! Nintendinho clássico voltará a ser vendido em 2018

A Nintendo não esperava tanta procura pela versão em miniatura quando ele foi lançado no ano passado, e, para agradar quem não conseguiu comprar um, a empresa anunciou que relançará o NES Classic em 2018. Perto de lançar outro console em miniatura, o SNES Classic, a Nintendo quer acalmar um pou...

Ler Notícia Completa

Nintendo está preparando um sistema de conquistas para o Switch

Durante um bom tempo eu fui um grande defensor das conquistas nos games. Não que eu tenha deixado de os apoiar, principalmente por achar que podem aumentar bastante a vida útil dos títulos para algumas pessoas, mas a verdade é que se antes eu tentava explorar mais o sistema, hoje raramente procu...

Ler Notícia Completa

Street Fighter 2 será relançado para o Super Nintendo em edição comemorativa

A Capcom decidiu entrar na onda retrô que vem se espalhando pelo mercado de videogames e relançou "Street Fighter II" para Super Nintendo. O anúncio marca o aniversário de 30 anos do título, mas também serviu para dar o pontapé inicial em uma coleção de relançamentos tocada em parceria com a Re...

Ler Notícia Completa

Nintendo encerrará sua rede social

A Nintendo anunciou que fechará as portas da sua rede social, a Miiverse, no dia 8 de novembro. O serviço foi lançado junto com o Wii U e possibilitava uma integração dos posts com alguns jogos tanto para aquele console quanto para o 3DS, mas o Switch, lançado neste ano, não oferece suporte. Se...

Ler Notícia Completa

Confira a lista de jogos que estarão bem melhorados no Xbox One X

Um dos grandes focos da Microsoft em sua apresentação na Gamescom 2017, neste domingo (20) foi o Xbox One X. E com a abertura das pré-vendas do console veio também a lista inicial de títulos que terão melhorias na nova plataforma. Ao todo, 100 jogos já foram confirmados com upgrades na chegada...

Ler Notícia Completa

O GamePass do Xbox você permitirá que vocè jogue ReCore no Windows 10

Caso você esteja planejando assinar o sistema GamePass, que garante acesso a mais de 100 jogos no Xbox One, saiba que ele também oferece a oportunidade de jogar ao menos um título no Windows 10. O game em questão é ReCore: Definitive Edition, que conta com crossplay entre as plataformas e foi in...

Ler Notícia Completa

Confira a lista de jogos gratuitos da Games With Gold de setembro. Tem jogaço de corrida!

A Microsoft revelou nesta quinta-feira (24) os games que serão distribuídos na Games with Gold de setembro. Ou seja, se você é assinante da Xbox Live Gold, não perca a oportunidade de baixar games incríveis gratuitamente. Exclusivamente para o Xbox One, serão disponibilizados o famoso jogo de co...

Ler Notícia Completa

Você sabia?

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.

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.

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

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!