10
votes

La barre de défilement ne met pas à jour sur la modification de la valeur de défilement

Lors de la réglage verticalscroll.value dans un panneau avec Autoscroll défini sur true , la position de défilement change en conséquence Mais la position du pouce ne le fait pas. Dois-je mettre à jour la barre de défilement en quelque sorte ( invalidate (true) sur le panneau ne fonctionne pas)? Des idées?


0 commentaires

5 Réponses :


28
votes

Essayez appeler .performlayout ();


2 commentaires

Oui, peut confirmer, cela fonctionne parfaitement pour moi sur 3 contrôles différents. Merci.


Grande solution.



6
votes

merci pour le .performlayout () code> Conseil!

Il ne suffisait pas dans mon cas, je définit la verticaleCroll.value dans le formulaire Form.Shown Code > Gestionnaire d'événements, et pour une raison quelconque, je devais ajouter un instruction code> code> à l'avance pour le défilement au travail. p>

Voici mon montré code> manutention d'événement:

Private Sub MyForm_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown
    System.Windows.Forms.Application.DoEvents()

    ScrollPanel.VerticalScroll.Value = ScrollPanel.VerticalScroll.Maximum
    ScrollPanel.PerformLayout()
End Sub


0 commentaires

0
votes

J'avais exactement le même problème lorsque vous essayez d'attaquer un panneau contenant une zone d'image.

J'ai trouvé une autre méthode pour le faire fonctionner. Incrémentez la valeur de défilement deux fois: xxx

incrémentation de la valeur La première fois que la boîte d'image fait défiler l'image dans le panneau, mais le .value ne change pas et le pouce ne change pas. t bouger.

incrémentation de la valeur La deuxième fois provoque progressivement la verticale.Value, déplaçant le pouce, mais la boîte d'images n'est pas défilée à nouveau.

semble être un bug pour moi. Sûrement à la fois le défilement de la boîte d'images et l'incrémentation de .value et mouvement du pouce devraient se produire après la première ligne de code.


0 commentaires

0
votes

J'ai couru dans quelque chose de presque identique où j'ai une boîte à images (montrant un graphique) à l'intérieur d'un panneau avec des barres de défilement, et je veux zoomer ou sortir de la position de la souris-pointeur "apparemment" stationnaire. Ré-positionnement de la carte d'écran à l'intérieur du panneau pour effectuer cette option de synchronisation avec les barres de défilement, puis faites défiler avec les barres de défilement ne montrera pas la surface complète de la vue d'images. La solution consiste à accomplir le déplacement en attribuant une valeur calculée au panneau.horizontalscroll.value et / ou panneau.ValleScroll.Value. Mais cela seul n'est pas suffisant: l'une de ces deux solutions est nécessaire pour faire fonctionner l'application tel que conçu:

  1. solution de KMAN ci-dessus: XXX

  2. ou la solution de JJMcLellan ci-dessus: Dans mon cas, attribuez la valeur calculée deux fois, par exemple: XXX

    L'une d'entre elles semble avoir les mêmes résultats finaux. Depuis # 2 ci-dessus, il ressemble à un bug, et # 1 semble (espérons-le) être par conception par Microsoft (?), J'ai fini par utiliser n ° 1 dans mon application. Je voulais juste confirmer ces deux travaux dans un environnement VB.NET.


0 commentaires

0
votes

J'essayais de le faire fonctionner sur une forme. J'ai essayé la performlyout (), j'ai essayé Application.Deevents (), j'ai essayé d'attribuer la verticalecroll.value deux fois, rien de tout cela n'a fonctionné. La seule chose que j'ai à travailler était de changer une propriété de VerticalScroll à une valeur différente, puis de le changer: xxx

Notez que cela fonctionne aussi bien pour changer de verticalScroll.value, mais Vous devez réellement modifier sa valeur et vous assurer que la modification est comprise entre minimum au maximum est beaucoup plus complexe que de augmenter temporairement de manière temporaire.


2 commentaires

Le problème OnVissibléChanged signifie probablement que votre problème est différent de ce que le questionneur a affiché.


Je pense que vous avez raison ... je pense que la différence est la mine définissant les propriétés de la barre de défilement avant d'ouvrir le formulaire, alors que cette question consiste à positionner une barre de défilement déjà visible. Je pense que cela vaut la peine de quitter cette réponse sous la question, même si le scénario est légèrement différent.