Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
118
Assunto : Visual Basic
Titulo: Resolvendo problema com Load do Form e Set =Nothing

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Passeando por diversos sites vi dicas sobre ser cuidadoso com o Nothing devido a problemas com o Load.

Realmente, se você fizer o seguinte código :

Form2.Text1.Text = "testando"
Set Form2 = Nothing

Sem ter se referido ao form2 em momento algum antes terá sérios problemas. Vamos por partes : Set form2=nothing destroi o form, certo ?

Errado ! Set form2=nothing destroi o ponteiro para o form que está contido na variável form2. Quem destroi o form é um pequeno agente que acompanha sua aplicação e é chamado de Garbage Collector.

Mas o Garbagge Collector só destroi o form quando não houver mais nenhum ponteiro se referindo a ele. Dai o problema causado pela instrução anterior :

Form2.Text1.Text = "testando"

Por estar setando o valor da propriedade de um componente esta instrução causa 2 eventos : Initialize e load. O load carrega os componentes do form e gera em memória ponteiros para o form. Assim sendo, quando utilizamos set form2=nothing o form não é realmente eliminado, pois existem outros ponteiros para ele.

Desta forma, ao utilizarmos o Unload me no form principal para fecharmos a aplicação esta não se encerra por completo, deixando ainda um form carregado em RAM.

Até aqui isso já havia sido exposto por outros site. Mas e ai, qual a solução ? A questão é : Onde está o ponteiro que está apontando para o form (wally?) ?

Eis o grande mistério : O ponteiro criado pelo load fica guardado dentro da coleção FORMS do Vb, que contém todos os forms carregados em RAM. Assim sendo, se ao invés de darmos um simples unload me ao fechar a aplicação vasculharmos toda a coleção FORMS, resolveremos assim o problema do wally (ops.. ponteiro) perdido.

Veja :

Dim f as form
for each f in forms
unload f
next

Esta fica sendo então a forma mais confiável de fechar a aplicação.

Por outro lado, se não quisessemos fechar a aplicação mas apenas eliminar o form perdido da RAM, também recorreríamos a coleção FORMS :

Dim f as form
for each f in forms
if ucase(f.name)="FORM2" then
unload f
end if
next


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 2/1/2017 1:08:00 AM
nome: WlYUBtHKKjWj
email: derby451@hotmail.com
comentário:
rPlfDf http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/31/2017 10:41:00 AM
nome: YCJCbMrdAbJ
email: derby451@hotmail.com
comentário:
4H8fsV http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/30/2017 12:12:00 AM
nome: TqUgqZTseDwr
email: derby451@hotmail.com
comentário:
4f5o3e http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 11:03:00 PM
nome: dXOZWCvhDhGdS
email: jogcbfn@hotmail.com
comentário:
6PqU25 http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 7:57:00 AM
nome: jjehXqPeANH
email: jogcbfn@hotmail.com
comentário:
db66PX http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br