Autoscroll du panel foireux :)
J'ai perdu une bonne partie de la journée (et de la nuit) à chercher pourquoi lorsque je clickait sur un control perso qui se trouvait dans un panel scrollable, j'avais un mouvement de ma scrollbar , qui amenait mon control à être légerement décalé.
Etant dans un contexte de Drag / Drop , ca pose un problème d'estethisme assez flagrant.
Pour comprendre ce qui se passe je m'attaque au Location_Changed de mon control pour intercepter la stack.
Après beaucoup de recherche voici le problème , et donc la chose à ne pas faire.
Dans mon code dans le click du control je fais:
((PlannerItem)sender).Selected = !(((PlannerItem)sender).Selected);
A priori rien d'exceptionnel si ce n'est que dans ma property j'ai ce morceau de code :
if (this.Parent != null)
this.Parent.Focus();
Eh bah le bug viens de là :
le focus () et le select() appelle tout deux la méthode ActiveControl qui reset la position des scrollbars. Etant dans un contexte de Drag and Drop la barre se redeplacait sur la droite d'ou l'effet de va et vient au click.
Bilan :
Pas de focus et pas de select dans un click Down si vous êtes dans un panel autoscrollé !
Faite le test avec un panel autoscrollé et une picturebox avec une grande image. Faite un bouton qui fait focus sur le picturebox ou un select. Les scrollbars seront remises à zéro.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :