Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Ao Instanciar Um Novo Formulario


Guest --Bruno --

Pergunta

Guest --Bruno --

Olá galera...

eu esotu fazendo um projeto, só que alguns formualrios, só podem ser aberto uma vez ...

então eu tentei achar uma solução ao modo bruno, hehe ...

então pensei em criar um HashTable com uma classe que eu criei que indicava se o formulario estava aberto, num sei se expliquei muit bem...

bom a classe ficu asssim

class FormClass
    {
        private Form Formulario;
        private bool opened;

        public FormClass(Form _formulario)
        {
            opened = false;
            Formulario = _formulario;
        }

        public void Close()
        {
            opened = false;

        }

        public void Open(){
            if (opened)
            {
                MessageBox.Show("Formulario já aberto");
                Formulario.Activate();
            }
            else
            {
                MessageBox.Show("Abrindo formulario");
                Form f = Formulario;
                f.MdiParent = Program.frmPrincipal;
                f.Show();
                opened = true;
            }
        }
    }
Ou seja, a meu ver, estava tudo bem, quando tentava abrir um formulario que já existia ele dava a msgbox, e tudo... porem quand eu fecho o formulario e abro denovo chamando o método Open(), ele me retorna este erro :
Não é possível acessar um objeto descartado.
Nome do objeto: 'priForm'.
O erro acotnece nesta parte do codigo :
Form f = Formulario;
f.MdiParent = Program.frmPrincipal;
f.Show();
opened = true;

Bom,, eu itnendi o por que do erro, eu só não sie como contornalo, porque existem varios frmualrios :

frm_Principal,

pri_Form,

agenda_FormEditar,

agenda_FormNovo,

agenda_FormPrincipal,

escola_FormAlunoNovo,

escola_FormClasseNovo,

escola_FormEscolaHorario,

escola_FormHorarioAddHoras,

escola_FormHorarioAulas,

escola_FormEscolaNovo,

escola_FormEscolaPrinc,

e aidna existem outros... como faço isos funcioanr =/

brigado galera,

parabens pelo trabalo neste forum

t+

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Bom, vou fazer em VB.NET, olha isso daqui:

Dim abre as New Form

abre.Show

Toda vez que você for manipular objetos, você tem que criar uma instância, isso é lógico. Mas, se isso não der certo, torne a variavel pública e manda bala, que não dá mais erro...

Eu mesmo, no começo, tambem apanhei com isso, e fiz um longo debate sobre isso aqui no fórum, é só dar uma procurada que você acha, beleza?

Flws!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Bruno --

Não, tipo, isso eu sie cara =P ...

mais olha o problema, eu tenho varios formularios que só podem ser abertos uma vez...

e sempre que um formulario fecha, eu descarrego ele da memoria, e chamo o evento Close() dessa classe que eu montei...

ou seja a variavel : private Form Formulario;, foi pro espaço, saiu da memoria, por isso que eu não consigo mais referenciala na parte : Form f = Formulario; ...

mais, este Foirmulario, pode ser qualquer frmulario destes :

agenda_FormEditar,

agenda_FormNovo,

agenda_FormPrincipal,

...

e eu não posso simpelsmente fazer f = new Form(), pois não iria instanciar o formulario que eu quero...

o jeito que eu consegui atehn agora foi assim

if(Formulario is priForm){
                    f = new priForm();
                }else if (Formulario is age_FormPrincipal)
                {
                    f = new age_FormPrincipal();
                }

mais são muitos formularios, acho que não seria viavel fazer isso, alguém sabe outro jeito ?

brigadão, t++

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que daria para você sobrescrever o método Close() para não fechar e sim somente fazer com ele desapareça (usando o método Hide()). Daí, no seu Open() você iria verificar se ele já existe e se está fechado, para então mostrá-lo na tela (usando o método Show()).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Então...

eu pensei nisso... mais é que queria saber se dava pra fazer do meu jeito mesmo ...

não existe jeito de fazer o objrto discartado retornar um valor mesmo, então ? =/

bom, muito obrigado galera...

vou fazer com hide() mesmo, t+

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...