X

Atualizando Formulário principal através de um formulário secundário C#

Como atualizar formulário principal(pai) de sua aplicação c# através de um formulário secundário(filho) em uma aplicação windows forms

Publicado: Modificado:

Bonus630 Bom já vi esta duvida em muitos lugares, é uma duvida que geralmente quem está iniciando tem, eu mesmo a tive. Muitas vezes você tem sua aplicação rodando em um formulário e tem outro formulário de edição para um tipo qualquer de dado que está sendo exibido para o usuário, e nós como bons amigos dos usuários queremos que assim que ele terminar a edição no formulário de edição, o formulário principal atualize para os novos dados, deixando assim todo mundo satisfeito.
Vou mostrar aqui dois métodos para fazer isso, todos dois relativamente simples, no primeiro caso mostrarei como fazer sendo que os dois formulário estão em um mesmo projeto, no seguinte mostrarei em projetos separados, formulário principal em um projeto, no exe da aplicação, e o outro em uma dll.

Aplicação utilizando somente um projeto

Vamos construir nossa aplicação da seguinte forma.

Crie um novo projeto windows Form. No formulário adicione um Label e um Button.

designer_form1

Agora o código.

codigo_form1

Lembre-se este é um projeto simples, iremos somente atualizar um nome em nosso Form.

Adicione mais um Form ao seu projeto e neste adicione dois Labels, dois TextBox e um Button

designer_form2

Código

codigo_form2

Note como foi simples, passamos nosso formulário principal por referencia e no nosso outro formulário somente passamos nossos dados atualizados e chamamos o método atualizaNomeCompleto() do formulário principal,veja que funcionou perfeitamente, então agora vamos criar uma nova solução com dois projetos, um para o exe de nosso software e outro para a dll.


Aplicação utilizando dois projetos

Agora vamos ver o que acontece com nosso código quando nossos formulários estão em diferentes projetos.

Primeiro vamos tentar reaproveitar nossos códigos,Crie um novo projeto Windows Forms no Visual Studio, se preferir abra uma nova instancia do visual studio para comparar



Faça o formulário principal igual do primeiro passo, até mesmo com os mesmos códigos.

Agora ao invés de criar um novo formulário no projeto vamos adicionar um novo projeto na solução, um projeto class library, que gerara uma dll, para isso basta clicar com o botão direito em cima da sua solução no "Solution Explorer" e ir em "add new project".

Adicione agora um formulário no seu novo projeto, e deixe-o com a cara do nosso formulário de edição da nossa primeira aplicação, adicione também os códigos, não esqueça de editar os nomes do componentes.

Note que já tivemos alguns erros em nossos códigos. Veja que o visual studio está nos mostrando o erro, que diz que a referência não foi encontrada.

Código Formulário principal.

codigo_form1

Código Formulário edição

codigo_form2

Vamos corrigir este problema primeiro no Formulário Principal (Form1).

Vá no "Solution Explorer" clique em "Add Reference" e selecione "Solution" lá você marca o seu projeto que contém o formulário de edição. 

add_reference_form1

Veja que ainda temos um erro, pois nosso formulário de edição ainda não tem a referência do nosso formulário principal, então vamos adicionar.

add_reference_form2

Que lindo recebemos um belo erro, do Visual Studio que não nos permitiu adicionar a referência, isso porque não podemos fazer referência cíclicas, já tínhamos usado uma referência do formulário principal para o formulário de edição, pois precisamos instancia-lo para exibi-lo para o nosso usuário, então agora ficamos proibidos de fazer uma referência do formulário de edição para o formulário principal.

add_reference_form2_erro

Vamos utilizar eventos para contornar essa situação.

Primeiro vamos modificar o código do nosso formulário de edição.

Primeiramente removi todo código que se referia ao nosso formulário principal, agora este formulário não terá nenhum vinculo com ele.

Depois criei um evento, e no clique do botão eu verifico se ele está nulo, se não estiver eu disparo. Estou utilizando um evento padrão que envia o objeto que o disparou e os argumentos, você pode criar outros tipos, para isso devesse criar "Delegates" específicos. Dê um build nesse projeto, somente neste.

evento_form2

Agora vamos editar o código de nosso formulário principal, vamos nos cadastrar no evento do formulário de edição, para que no momento que a edição ocorrer sermos notificados, agora repare que recebemos nosso formulário de edição como parâmetro , note que o correto seria criarmos um EventArgs para passar estes dados, faço a conversão e atualizo nosso formulário principal.

evento_form1




Demonstração























Faça doações com o botão do PayPal


Todos direitos reservados | 2003 à 2024 | Copyright © Bonus630 | Vr.:5.0