Usuário com melhor resposta
Não abrir o mesmo Form duas vezes

Pergunta
-
Pessoal tenho uma duvida
Tenho um FORM chamado Frm1 ao qual este chama o FRM2 atraves de um botão mas no FRM2 tenho uma chamada para o FRM1 ou seja são programas que tem atalhos onde é possivel um chamar o outro pois são Forms que trabalham em conjunto e independente de onde o usuario esteja quero colocar um atalho para que as chamadas para ambos sejam feitas, eu utilizo FORMS do tipo modalForm1 frm1 = New Form1();
frm1.showdialog();Faço a chamada dessa forma
Teria como eu testar o seguinte: digamos que estou no FRM1 e chamei o FRM2 e o usuario dentro do FRM2 clicar na chamado do FRM1 eu gostaria de testar isso e não abrir o FRM1 novamente
Junior
Respostas
-
Junior,
Você pode utilizar o pattern Singleton para implementar a funcionalidade de abrir somente uma instância de cada Form... Veja uma implementação desse pattern para Forms children de um MDI no seguinte link:
http://www.codeproject.com/KB/architecture/singletonforms.aspx
Porém, como você está abrindo os Forms utilizando ShowDialog, acredito que você não vai conseguir reativar o Form que já está aberto embaixo do Form que está por cima...
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta Julio Cesar Cosmo, MCP, MCTS terça-feira, 26 de julho de 2011 11:04
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 8 de agosto de 2011 16:50
-
Olá Junior,
Existe uma forma simples de resolver o seu problema.
Dentro da sua classe Form1 crie a variável referente ao Form2:
Form2 frm2;
Agora no evento do botão que deverá abrir o Form2:if (frm2 == null) { //instancie o formulario frm2 = new Form2(); //adicione um evento ao fechar o fomulario, //ao fechar o formulario essa variavel devera ficar nula, //caso isso nao seja feito, só será possivel abrir //o formulario uma vez, apos fechar ele nao abrirá novamente frm2.Closed += delegate { frm2 = null; };
//exibindo o formulario
frm2.ShowDialog(); }
Acho que isso resolve seu problema =)
Qualquer dúvida só perguntar!
Ao infinito e além!
twitter @elzacky- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 8 de agosto de 2011 16:50
Todas as Respostas
-
Junior,
Você pode utilizar o pattern Singleton para implementar a funcionalidade de abrir somente uma instância de cada Form... Veja uma implementação desse pattern para Forms children de um MDI no seguinte link:
http://www.codeproject.com/KB/architecture/singletonforms.aspx
Porém, como você está abrindo os Forms utilizando ShowDialog, acredito que você não vai conseguir reativar o Form que já está aberto embaixo do Form que está por cima...
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta Julio Cesar Cosmo, MCP, MCTS terça-feira, 26 de julho de 2011 11:04
- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 8 de agosto de 2011 16:50
-
Olá Junior,
Existe uma forma simples de resolver o seu problema.
Dentro da sua classe Form1 crie a variável referente ao Form2:
Form2 frm2;
Agora no evento do botão que deverá abrir o Form2:if (frm2 == null) { //instancie o formulario frm2 = new Form2(); //adicione um evento ao fechar o fomulario, //ao fechar o formulario essa variavel devera ficar nula, //caso isso nao seja feito, só será possivel abrir //o formulario uma vez, apos fechar ele nao abrirá novamente frm2.Closed += delegate { frm2 = null; };
//exibindo o formulario
frm2.ShowDialog(); }
Acho que isso resolve seu problema =)
Qualquer dúvida só perguntar!
Ao infinito e além!
twitter @elzacky- Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 8 de agosto de 2011 16:50