none
Não abrir o mesmo Form duas vezes RRS feed

  • 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 modal

    Form1 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
    domingo, 24 de julho de 2011 17:02

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
    segunda-feira, 25 de julho de 2011 23:28
    Moderador
  • 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
    terça-feira, 2 de agosto de 2011 12:57

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
    segunda-feira, 25 de julho de 2011 23:28
    Moderador
  • 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
    terça-feira, 2 de agosto de 2011 12:57