7
votes

Pourquoi clique-t-il dans une zone de texte car un panneau AutoScroll fait défiler vers le haut?

Finir un formulaire de registre dans une application C # et j'ai remarqué avec le panneau si j'accepte ATOSCroll, puis une boîte de texte inférieure au défilement et cliquez dessus, il saute tout le chemin du haut. Y a-t-il un moyen de résoudre ce problème avec un code ou est-ce une convenance?

C'est un peu difficile pour moi de m'expliquer en mots, voici donc une vidéo courte qui montre le comportement.


5 commentaires

Je ne peux pas reproduire ce comportement. Plus de détails s'il vous plaît.


Qu'est-ce que "une zone de texte en dessous du rouleau et cliquez dessus" signifie?


Ok heres une vidéo de celui-ci. J'ai eu des problèmes d'essayer de l'expliquer. Vimeo.com/17483007


Quelqu'un a des idées? Tout ce qu'il s'agit d'un groupe de groupements-> panneau avec autoscroll activé -> une autre boîte de groupe-> étiquette + zone de texte. Des idées?


J'ai le même problème, mais dans mon cas, le défilement ne diminue en bas que lorsque le formulaire est chargé pour la première fois. Y a-t-il quelque chose que je puisse le déplacer de nouveau à l'aide du code.


4 Réponses :


1
votes

Épargement, personne n'a vu ce comportement avant et pourrait fournir une réponse rapide, j'ai ouvert un studio visuel pour essayer de reproduire ce que vous décrivez.

J'ai créé un nouveau projet Winforms avec un groupbox contenant un dont la propriété autoscroll est définie sur "vrai". Ensuite, j'ai ajouté deux nouvelles commandes contrôles intérieurs du panneau , chacun contenant deux textbox contrôles. La première incorporée groupbox est en haut du formulaire, entièrement visible au démarrage; Le deuxième groupe groupbox est en bas où il doit être défilé en vue. Cela équivaut à la conception / la mise en page que vous avez du mieux que je peux dire à votre description et votre vidéo.

Cependant, lorsque j'exécute le projet, faites défiler jusqu'à la seconde boîte groupbox et sélectionnez l'une des commandes TEXTBOX Contrôles qu'il contient, il fonctionne exactement comme attendu . Le contrôle de texte que j'ai cliqué sur obtient la mise au point, sans faire défiler tout le panneau entier sur le dessus. Je ne peux pas sembler reproduire ce que vous voyez. Si vous pouviez distinguer ce que j'ai fait de mal à concevoir mon échantillon de test ou poster le plus petit projet d'exemple nécessaire pour recréer le comportement que vous rencontrez, je pourrais peut-être vous aider.

Sinon, voici quelques suggestions de choses à enquêter:

  1. l'ordre de l'onglet des objets sur votre formulaire. Cela ne devrait pas vraiment causer le comportement décrit car cliquer sur sur un contrôle doit définir la mise au point sur un contrôle. Ce contrôle, quelle que soit sa position dans l'ordre des tabulolettes, et jumblage la commande de tabulation de plusieurs fois dans mon exemple de projet ne semble toujours pas avoir le même effet. Mais je suppose que ça vaut la peine d'essayer quand même. En mode de conception, allez dans votre menu "Affichage", puis cliquez sur "Ordre des onglets". Toutes les commandes que vous pouvez définir l'ordre des onglets permettent d'avoir une boîte de couleur de couleur dans leur coin supérieur gauche, indiquant leur ordre de tabulation dans chaque conteneur. Pour définir l'ordre de l'onglet, cliquez une fois sur chacune des commandes de l'ordre naturel, vous souhaitez qu'ils soient ciblés.

  2. Ecourez votre code pour tout .focus ou déclarations. Assurez-vous de ne pas avoir de code de validation qui modifie l'ordre de tabulation de quelque manière que ce soit pendant l'exécution. Cela pourrait provoquer la mise au point de revenir à un contrôle situé à proximité du haut de votre panneau , le forçant à faire défiler automatiquement jusqu'au nouvel emplacement.

  3. Essayez de reproduire le comportement dans un nouveau projet propre et propre. Idéalement, créez un nouveau projet dans Visual Studio et posez les commandes les exactement même Comment vous les avez dans le projet avec lequel vous rencontrez des difficultés. C'est la même chose que j'ai faite, en partie parce que je n'ai pas votre projet particulier à travailler avec, et aussi parce que c'est la meilleure façon de résoudre le problème de manière particulièrement délicate. Il est plus probable qu'il y ait une quirk à votre conception ou à votre code source qui provoque ce comportement, plutôt que sur une sorte de bogue dans les contrôles eux-mêmes. Mais de toute façon, cela vous permettra de savoir exactement le problème se produit, ce qui vous fera beaucoup plus près d'une solution.


2 commentaires

En fait, je l'ai compris, je définissais la valeur automatique Max sur 1000, je pourrais donc ajouter des choses, mais une fois que tout a été ajouté, j'ai supprimé la valeur, puis il a commencé à fonctionner bien. Juste un problème étrange, je suppose.


J'ai le même problème, mais dans mon cas, le défilement ne diminue en bas que lorsque le formulaire est chargé pour la première fois. Y a-t-il quelque chose que je puisse le déplacer de nouveau à l'aide du code.



2
votes

J'ai eu ce problème exact. Je devais retirer l'amarrage de mes panneaux sur la forme et cela fixe le problème.


1 commentaires

Merci 7 ans plus tard, vous venez de mettre fin à mes 2 jours de déboguer cela. Le problème est que, lorsque vous cliquez, le panneau prend l'emplacement du pointeur relatif à la fenêtre de la fenêtre et fait défiler cette position par rapport à lui-même, le ramener au sommet.



18
votes

J'ai eu le même problème. Je l'ai résolu avec ce code dans mon panneau: xxx


0 commentaires

-1
votes

Vous pouvez utiliser TableLayOntPanel "au lieu de" panneau "pour éviter que la barre de défilement change de position.


0 commentaires