Notifications
Clear all

Possível falha em tempo real. Depurando funciona normal.

8 Posts
3 Usuários
0 Reactions
1,273 Visualizações
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Bom dia!

Tenho em um userform, 12 controles do tipo Image, esses controles são carregados com imagens de um diretório local, quando um commandbutton é pressionado. São 12 commandbuttons, cada um que for pressionado carrega um menu de imagens que são mostrados nos controles Image. Ok.

Esse controles Image possui uma rotina no evento click. A rotina é simples, apenas apresenta em uma Label uma string foi associada a imagem. Ok.

Então, toda vez o clico em algum commandbutton, carrego imagens para os Image e eu posso clicar em qualquer Image para ver essa string. Ok.

Agora vem o problema: Toda vez que clico em algum commandbutton, tenho que limpar os Image's, e eu faço isso assim:

For x = 1 to 12
Userform1.Controls("Image" & x &).Picture = Nothing
Next

O problema é que seu eu tiver clicado em algum Image com uma imagem, quando clico em outro commandbutton pra trocar o menu de imagens, aquela imagem que foi clicada continua lá pela metade, dividida com a imagem gerada pelo novo click de outro botão. Entre outras, se eu não clicar em nenhuma imagem, consigo trocar meu menu corretamente, o comando de limpar antes de carregar funciona bem, mas seu eu clicar em alguma Image carregada com qualquer imagem, o comando de limpar não limpa completamente, limpa mais ou menos rsrs.

E o mais "legal" é que, se eu der um alt+tab, tipo tirando o foco do userform, quando eu volto pra ele, tudo fica normal.

Eu uso:

Application.EnableEvents = False
Application.ScreenUpdating = False

Application.EnableEvents = True
Application.ScreenUpdating = True

Outro detalhe importante: Quando eu rodo o código no modo de depurar ele funciona normal e eu consigo ver o resultado certo no userform.

É dificil até de explicar, mas é como se o excel estive falhando na leitura do código no tempo real. Sei lá.

Alguém tem idéia do que pode ser?

At

 
Postado : 02/10/2013 5:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente utilizar o método Repaint após "limpar" os controles image;

Repaint: Atualiza a exibição redesenhando o formulário ou a página

Seria algo =/- assim:

For x = 1 to 12
    Userform1.Controls("Image" & x &).Picture = Nothing
   Next
UserForm1.Repaint
'ou Me.Repaint
 
Postado : 02/10/2013 6:26 am
(@bilokas)
Posts: 168
Reputable Member
 

Reinaldo, tem como dar uma olhada no post que eu fiz de Hiperlink. To precisando de ajuda também!

 
Postado : 02/10/2013 7:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Reinaldo, tem como dar uma olhada no post que eu fiz de Hiperlink. To precisando de ajuda também!

Bilokas, favor não postar solicitações referente a outros tópicos de assunto diferentes, se quer solicitar ajuda diretamente a qualquer um dos colaboradores, favor fazer em PVT (Mensagem Privada), vou manter este post por enquanto, depois apago.

Assim mantemos o Forum organizado.

[]s

 
Postado : 02/10/2013 8:36 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Experimente utilizar o método Repaint após "limpar" os controles image;

Repaint: Atualiza a exibição redesenhando o formulário ou a página

Seria algo =/- assim:

For x = 1 to 12
    Userform1.Controls("Image" & x &).Picture = Nothing
   Next
UserForm1.Repaint
'ou Me.Repaint

E ae Reinaldo, blz;

Obrigado pela resposta, mas não funcionou.

Li no ajuda do Excel o que seria esse método, em tese seria isso mesmo, ele atualiza a exibição redesenhando o formulário ou a página.

Infelizmente não funciona, o controle Image quando clicado, mesmo depois da troca da imagem, fica com um pedaço da imagem anterior, se eu der um alt+tab ae sim fica normal.

Alguma outra dica pessoal para tentar solucionar esse perrengue?

At

 
Postado : 03/10/2013 6:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Inverta a ordem do Repaint e veja se da certo :

For x = 1 to 12
UserForm1.Repaint
Userform1.Controls("Image" & x &).Picture = Nothing
Next

De uma olhada no Tópico abaixo onde montei um exemplo na época para o colega Guma e ele chegou ater o mesmo problema, veja se ajuda.

Carregar Imagens Aleatórias
viewtopic.php?f=21&t=8167

[]s

 
Postado : 03/10/2013 7:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bem tive um problema similar, em um formulário, quando da troca de imagem a mesma não trocava , às vezes após atualizava ao "clicar" sobre a mesma
e/ou forçar a reinicialização do formulário.
Contornei o problema utilizando esse método; somente um detalhe (depois de rever o arquivo) o "repaint" é utilizado antes de limpar a controle.
Tambem, agora, notei no seu exemplo um " & " aparentemente a mais, verifique se não está equivocado.

For x = 1 to 12
Userform1.Controls("Image" & x &).Picture = Nothing
Next

Talvez assim:

    
UserForm1.Repaint
For x = 1 to 12
        Userform1.Controls("Image" & x).Picture = Nothing
       Next

Ou disponibilize seu arquivo para uma analise >

 
Postado : 03/10/2013 7:17 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Galera, boa tarde!

Obrigado Reinaldo, Coutinho, o metódo Repaint resolveu meu problema. Coloquei depois da rotina completa, ele atualiza o userform.

Desculpem a demora para retornar, mas estava viajando, no mato, sem internet, sem contato com seres humanos rsrs.

At

 
Postado : 10/10/2013 9:58 am