Fórum
Ver pergunta

Formulários abrem várias vezes   

32 visualizações
0
0

Boas,

Há uma coisa estranha que nos acontece esporadicamente em projetos de extensibilidade de diferentes cliente. Nesses projetos nós criamos uma ribbon que contém botões que abrem formulários.

Não sabemos bem qual é a causa, mas muitas vezes, o ERP cria várias instâncias do formulário e torna-se constrangedor.
Nós temos forma de forçar só a abrir uma instância do formulário, mas não é bem solução porque existem situações que é necessário abrir duas vezes o formulário.

Alguém consegue ajudar?

Faça login para poder traduzir
V10
Marcado como spam
Criado há 1 mês e 1 dia brunooliveira
b
brunooliveira Iniciante
Comentários
@brunooliveira, Por favor, agradeço que formalize este pedido, via ticket de suporte. Coloque toda a informação necessária para que a equipa analise a situação. Uma vez que a situação ocorre em variados cenários e várias queixas sugiro a analise pela equipa técnica e de produto.
2 semanas e 3 dias
armandogonalves
    3 respostas
    0
    Resposta privada

    Deixo aqui um exemplo de um método para contornar a situação:

    // <summary>
            /// verifica se fdu ja esta aberto e dá focus retornando true, caso contrário retorna falso
            /// </summary>
            /// <param name="Nome_FDU"></param>
            /// <returns></returns>
            public bool VerificaFDUAberto(string Nome_FDU)
            {
                bool alreadyOpened = false;
                FormCollection MDIFORM = Application.OpenForms;
                foreach (Form frm in MDIFORM)
                {
                    if (frm.Controls.ContainsKey(Nome_FDU))
                    {
                        frm.Focus();
                        frm.BringToFront();
                        frm.Show();
                        frm.WindowState = FormWindowState.Normal;
                        alreadyOpened = true;
                    }
                }
                return alreadyOpened;
            }
    
    
    

    Na Ribbon:

    if (!checkFDU.VerificaFDUAberto(typeof(FDU_Teste).Name))
     {
          using (var result = BSO.Extensibility.CreateCustomFormInstance(typeof(FDU_Teste)))
          {
               if (result.IsSuccess())
               {
                      (result.Result as FDU_Teste).Show();
               }
          }
     }

     

    Faça login para poder traduzir
    Marcado como spam
    Criado há 1 mês e 11 horas pedrogodinho-2
    p
    pedrogodinho-2 Responsiveness Member
      2
      Resposta privada

      Acredito que seja mesmo um bug que a Cegid necessite de tratar.
      Esse problema acontece mesmo a toda a gente. E o pior é que não há um padrão, pode acontecer só em determinadas sessões e passado n vezes do botão ser executado.

      Acredito que a imagem que esteja a partilhar seja mais ou menos o que vocês implementaram.

      No entanto, deixo aqui uma ideia para controlar a abertura de múltiplos formulários iguais:
      Ter uma variável global do tipo DateTime que guarda sempre a última vez que o formulário foi aberto.
      Só irá abrir o formulário caso a diferença entre o tempo atual e o valor da variavel global seja superior a 30 segundos.
      Claro que é um contorno, mas que resulta para a situação que pretendem.

      Faça login para poder traduzir
      Marcado como spam
      Criado há 1 mês e 1 dia joolagoa
      j
      joolagoa Iniciante
        2
        Resposta privada

        Boa Tarde, também tenho esse problema e não consigo resolver...

        Faça login para poder traduzir
        Marcado como spam
        Criado há 1 mês e 1 dia brunogomes
        b
        brunogomes Most Valuable Professional