Comment pouvez-vous arrêter un Winforms Panneau de défilement?
Si vous mettez un DataGridView qui est de 400 pixels de haut sur un panel de 300 pixels de haut, de sorte qu'il y a une barre de défilement sur le panneau, puis faites défiler vers le bas de sorte que la moitié inférieure de la grille est affichée, puis cliquez sur un contrôle à l'extérieur du panneau, puis cliquez sur une ligne dans la grille, le panneau de défilement vers le haut vers le haut et la mauvaise ligne de la grille est sélectionnée.
Ce n'est pas seulement un DataGridView; il se produit avec n'importe quel contrôle plus élevé que le panneau, par exemple, Infragistics UltraWinGrid, Zone de Texte enrichi. Je l'ai soulevé comme un bug avec Infragistics, mais ils disent que c'est un problème de Microsoft.
J'ai essayé d'utiliser tous les événements pertinents pour les contrôles, mais le Panneau de défilement qui se passe avant les événements du feu.
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
Je devine que vous définissez la propriété AutoScroll du panneau de vrai. Lorsque vous procédez ainsi, les applications de commutation réinitialise la position de défilement à zéro et le groupe réinitialise sa position.
Si vous éteignez AutoScroll et ajouter votre propre barre de défilement, vous pouvez définir la barre de défilement du maximum et minimum en fonction des exigences pour le panneau, puis mettre le panneau de défilement des valeurs dans le Défilement des événements de la barre de défilement. Ce n'est pas réinitialisé lorsque vous passez de windows.
Quelque chose comme:
Ce qui était nouveau sur moi, et j'ai eu de la recréer. Je pourrais avoir à ajouter un article sur mon site à ce sujet 🙂
Cela est causé par la ScrollToControl événement déclenché automatiquement par le ScrollableControl classe, et le gestionnaire d'événements de défilement pour afficher en haut à gauche de contrôle qui a le focus. Ce comportement n'est pas utile lorsque le défilement de contrôle conteneur ne contient qu'un seul contrôle. J'ai été très frustré par ce comportement que j'ai découvert comment l'arrêter.
Le moyen d'arrêter ce comportement est de remplacer la ScrollToControl gestionnaire d'événements, comme ceci:
Remplacer votre panneau de contrôle avec ce panneau de contrôle.
Fait.
Grâce skypecakes, qui a fonctionné à merveille 🙂 Voici une version corrigée de votre contrôle, qui conserve également la trace de l'endroit où les barres de défilement où:
Cela ne fonctionne que si il y a juste un contrôle dans le Panneau (bien que je n'ai pas testé avec plus d'un contrôle).
Je comprends votre douleur, ce qui a réussi à me faire plus d'une fois.
Si votre DataGridView est la seule chose dans le panneau, il suffit de mettre le Dock de Remplissage et de laisser la DGV de la poignée de défilement sur son propre. Je ne pense pas qu'il fera le saut chose de plus. Sinon, je suppose que vous pourriez tout simplement la taille de sorte qu'il est encore moins que le panneau et de le laisser faire le défilement sur son propre.