Usuário com melhor resposta
Formulário pisca enquanto redimensiona

Pergunta
-
Estou desenvolvendo uma pequena aplicação em VB 2008 e estou experimentando um tremular da janela (formulário) enquanto ele é redimensionado.
Acontece que eu reposiciono o conteúdo, que está em um TableLayoutPanel com um código simples, mas o Utilizador vê um tremular de aproximadamente um segundo.
Há possibilidade de o formulário somente ser exibido após este redimensionamento? Ou o redimensionamento ser efetivado em segundo plano?
Code SnippetPrivate Sub frmProfessores_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
' Posiciona a tabAlunos no centro da tela (frmPrincipal).
tlpProfessores.Left = (
Me.Width / 2) - (Me.tlpProfessores.Width / 2)tlpProfessores.Top = (
Me.Height / 2) - (Me.tlpProfessores.Height / 2) - 60 End SubAh, o fomulário é um MDI-Filho e é chamado e maximizado a partir do Pai:
Code SnippetIf Aluno Is Nothing OrElse Aluno.IsDisposed Then
Aluno =
New frmAlunoAluno.MdiParent =
MeAluno.Show()
Aluno.WindowState = FormWindowState.Maximized
Else ' Ele já está abertoAluno.BringToFront()
End IfObrigado!
Respostas
-
Após várias tentativas, comprovadas (publicadas) em um outro computador com XP SP2 (o desenvolvimento se dá sob o Vista / VB2008), inclusive com figuras .JPG, .PNG e .BMP, não resta outra opção senão retirar a figura de fundo (logo).
E dou por encerrada esta publicação.
Muito agradecido ao ViewState por todo o empenho e votos de bom fim de semana a todos!
Todas as Respostas
-
-
O porém, ViewState, é que o TableLayoutPanel não possui a propriedade StartPosition. E centralizar o formulário onde este TableLayoutPanel está contido não é a solução, pois eu quero que este formulário fique sempre maximizado.
Se eu maximizo o TableLayoutPanel fica na mesma posição relativa e, consequentemente, descentralizado.
Obrigado!
-
-
Sim, eu tenho um formulário MDI-Pai (frmPrincipal) que tem, entre vários, um MDI-Filho (frmEscolas).
No frmEscolas, eu coloquei todos os objetos (campos, imagens, DataGridView, etc.) dentro das células de um TableLayoutPanel para poderem ser posicionados no centro do formulário aquando da maximização ou restauração.
Quando o Utilizador abre o frmEscolas, ainda no código do frmPrincipal, ele (frmEscolas) é maximizado e o TableLayoutPanel é centralizado. Nesta hora ocorrem muitas piscadelas.O que eu quero é evitar que o frmEscolas seja apresentado antes da centralização dos objetos para que o Utilizador não veja todo aquele "pisca-pisca". Ou outra solução.
Na esperança de ter sido mais claro, agradeço o seu interesse.
-
-
Não, ViewState, é importante que o TableLayoutPanel (e tudo o que está inserido nele) permanençam no tamanho "original". Ele deve apenas ser posicionado ao centro do MDI-Filho (frmEscolas).
Aliás, foi por essa razão que eu optei por usar este contentor, para evitar de posicionar todos os objetos no centro da tela (do MDI-Filho).
-
Agora sim entendi....
Tenta o seguinte
Code Snippetthis
.SuspendLayout();tableLayoutPanel1.Left = (
this.Width / 2) - (tableLayoutPanel1.Width / 2);tableLayoutPanel1.Top = (
this.Height / 2) - (tableLayoutPanel1.Height / 2) - 60; this.ResumeLayout(); -
Pos é, ViewStat, se eu retirar o BackgroundImage a sua dica fica cinco estrelas, mas se eu insistir em manter uma imagem (logo) de fundo, o problema persiste. Isso porque a imagem está com a opção BackgroundImageLayout ativada para esticar, e quando o formulário é redimensionado...
Parece que dessa eu não fujo, não é mesmo? A não ser que eu carregue a imagem após o redimensionamento (vou tentar!).
Ah, é em VB 2008 Express, por isso a sua dica fica melhor assim:
Code SnippetMe.SuspendLayout()
' Posiciona a tlpDisciplinas no centro da tela (frmPrincipal).
tlpDisciplinas.Left = (
Me.Width / 2) - (Me.tlpDisciplinas.Width / 2)tlpDisciplinas.Top = (
Me.Height / 2) - (Me.tlpDisciplinas.Height / 2) - 60 Me.ResumeLayout()Aguardo um comentário seu para fecharmos mais essa, por favor.
Desde já, obrigado!
-
-
-
Caro ViewState, eu até coloquei um breakpoint para ter a certeza, mas nem o ResizeStart, nem o ResizeEnd são acionados. Apenas o Resize!
Vai entender!
De qualquer forma eu vou tentar com uma imagem pequena (a atual tem 800x600) para verificar se é performance, embora o meus 2GB no Core2Duo 2,8GHz com a Radeon X1550 correspondem bem à demanda.
O MS SQL 2005 Express também tem se comportado bem noutras viagens...
Para já, até ao final de semana, eu mantenho esta em aberto.
Obrigado e até breve!
-
Nos testes com figuras pequenas o resultado é idêntico aos testes com figuras menores. Os formatos usados estão em .PNG com tamanhos que variam dos 25 aos 39kB.
Bem, consegui reduzir bastante o pisca-pisca.
Alterei o código no MDI-Pai...De:
Code Snippet' Abre o frmDisciplinas.
' Se ele nunca foi inicializado, significa que nunca foi aberto. If Disciplina Is Nothing OrElse Disciplina.IsDisposed ThenDisciplina =
Disciplina.MdiParent =
MeDisciplina.Show()
Disciplina.WindowState = FormWindowState.Maximized
ElseDisciplina.BringToFront()
End IfPara:
Code Snippet' Abre o frmDisciplinas.
' Se ele nunca foi inicializado, significa que nunca foi aberto. If Disciplina Is Nothing OrElse Disciplina.IsDisposed ThenDisciplina =
Disciplina.MdiParent =
MeDisciplina.WindowState = FormWindowState.Maximized
Disciplina.Show()
ElseDisciplina.BringToFront()
End IfDaí, depois que o formulário é apresentado, apenas duas piscadelas rápidas e o formulário já está disponível.
Obrigado!
-
-
Viva, ViewState!
Eu já havia tentado isso. Estranhamente ocorre de o formulário MDI-Filho ficar desposicionado:
Alinhado à esquerda e restaurado para qualquer valor de StartPosition e WindowState=Maximized.
Eu demorei para respondê-lo por estar fazendo o teste novamente. Já havia me esquecido do porquê.
Cumprimentos.
-
-
Após várias tentativas, comprovadas (publicadas) em um outro computador com XP SP2 (o desenvolvimento se dá sob o Vista / VB2008), inclusive com figuras .JPG, .PNG e .BMP, não resta outra opção senão retirar a figura de fundo (logo).
E dou por encerrada esta publicação.
Muito agradecido ao ViewState por todo o empenho e votos de bom fim de semana a todos!