Affichage gênant lors de passage visible à non visible [Résolu]

Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
- 6 oct. 2009 à 22:07
Bonjour,

J'ai un affichage un peu gênant :

J'ai 3 panels dans une form. Les 2 premiers sont en dock.Top et le dernier en dock.Fill.

Dans mon panel en dock.fill, j'ai 2 boutons :
1 me permettant de rendre visible le panel 1 et non le panel 2
l'autre me permettant l'inverse (panel 2 visible et panel 1 non visible).

Evidemment, lors d'un changement de visibilité, pendant un cours instant, le dernier panneaux étant en dock.fill occupe la place du panneau rendu non visible pour ensuite revenir à sa place quand le 2e panneau devient visible.

Je trouve ça un peu gênant pour les yeux...même si le comportement est logique.
Savez vous comment verrouiller l'affichage avant d'avoir complètement fini la gestion de celui-ci ?

Merci
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
3
Merci
Bon j'ai trouvé :


Me.SuspendLayout()

' Faire le changement

Me.ResumeLayout()


Ainsi le rafraîchissement est inhibé pendant le changement.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 193 internautes nous ont dit merci ce mois-ci

Commenter la réponse de VbNicoG
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
0
Merci
salut,

je viens de tester tant avec les 2 premiers panels de la même taille que le 2e beaucoup plus large, je ne vois pas le problème

une fois un panel invisible, il n'occupe plus de place
l'autre occupe alors la place du premier (plus ou moins), et le 3e prend le reste

je n'ai pas de scintillement ou quoi que ce soit, le fonctionnement est "normal"

si ta demandes est, au final, que le panel 3 ne change jamais de taille (selon les 2e premiers bien sûr, sinon juste un dock.bottom), il te faut mettre les 2 premiers panel dans un 4e qui lui est transparent et reste fixe (dock.none)
le panel3 restera donc à taille fixe (du bas du 4e au bas de ta form)

ou alors j'ai mal compris....
[hr]
Commenter la réponse de PCPT
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
0
Merci
Salut,

Merci pour ta réponse mais en ce qui me concerne, j'ai bel et bien un scintillement.

Pour être sûr que l'on parle de la même chose :
J'ai :
Panel 1 -> dock.top
Panel 2 -> dock.top
Panel 3 -> dock.fill

Panel 1 et Panel 2 ne sont jamais visible en même temps :
Panel 1 -> dock.top
Panel 3 -> dock.fill
OU
Panel 2 -> dock.top
Panel 3 -> dock.fill

Quand je fais :
Panel1.visible = false
Panel2.visible = true

Je vois clairement dans l'exécution, Panel 3 prendre toute la form puis revenir à sa place dès que Panel 2.visible = true.
Comme je switch la visibilité du Panel1 vers le panel2, le changement est visible à l'oeil.

J'avais essayé de mettre le panel3 en dock.Bottom, ça fonctionne mais ça ne m'arrange pas. J'ai également essayé de capter la taille et la location du panel3, puis de le passer en dock.none, de lui affecter taille et location, faire le changement puis le repasser en dock.fill mais c'est pareil.

Je vais essayer de le faire sur une appli neuve pour voir si le phénomène est toujours visible car je ne comprends pas pourquoi tu ne le vois pas.
Commenter la réponse de VbNicoG
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
0
Merci
Je viens de refaire le test sur une appli neuve :
Panel1- > dock.top avec backcolor rouge
Panel2- > dock.top avec backcolor noir
Panel3-> dock fill avec backcolor jaune
un bouton sur le panel 3 avec l'évènement click ci-dessous


 
Dim toggle As Boolean

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If toggle Then
            Panel1.Visible = False
            Panel2.Visible = True
            toggle = False
        Else
            Panel2.Visible = False
            Panel1.Visible = True
            toggle = True
        End If
    End Sub

Et là, on voit clairement en cliquant (en le faisant plusieurs fois, quitte à s'acharner), la couleur jaune prendre la totalité de la form pendant 1/10e de seconde certes mais je le vois.
Le vois tu ? Comment bloquer le rafraîchissement de la form pendant ce laps de temps ?

Merci
Commenter la réponse de VbNicoG
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
0
Merci
sans m'acharner j'avais à peu près le même code (avec les mêmes couleurs d'ailleurs), sans effet malgré une machine très loin derrière les récentes

tant mieux si le prob est réglé

bonne soirée

[hr]
Commenter la réponse de PCPT