2010-11-30 34 views
3

J'ai hérité d'un VB6 frankenstein "converti" en application winform VB.NET. Cette application a une tonne métrique de champs, les utilisateurs se sont plaints légitimement que l'ordre de tabulation est éteint (après un certain point, il commence à sauter partout dans le formulaire). Si je trouvais quelque chose dans l'ordre des onglets, je suis entré et j'ai activé Affichage> Ordre des onglets et cela m'a semblé bon.VB.NET Limite à la commande de tabulation?

Pour être sûr que j'ai revu le formulaire à nouveau et quand je suis dans l'ordre des onglets, tout va bien, mais quand l'application fonctionne, elle commence à sauter autour de la même zone qu'avant! Est-ce que quelqu'un d'autre a rencontré cela et comment avez-vous résolu si vous l'avez fait? [Modifier]: Ces formulaires de saisie sont tous sur des onglets distincts dans un contrôle onglet, ce qui brouille probablement la situation encore plus.

+2

Vous avez mes sympathies. J'ai aussi traité ma part de la folie vb6-> vb.net, et ce n'est pas amusant :( –

+0

@Joel & curtisk: Je me sens aussi bien. Faut-il commencer un groupe de soutien? J'ai beaucoup de douleur à partager. –

+0

@Paul Inscrivez-moi, cette chose est un gémissement: p – curtisk

Répondre

3

Existe-t-il d'étranges appels Focus dans le code qui remplacent l'ordre de tabulation et définissent le focus de l'application manuellement? J'ai eu des problèmes dans le passé avec la commande de tabulation se confondre et j'ai toujours eu recours à passer par l'application à partir de zéro et la configuration de la commande moi-même manuellement. Je me rends compte que cela peut ne pas être ce que vous cherchez mais je ne connais rien d'autre

+0

Dire que c'était un appel "étrange" de focus serait trop gentil, c'était joli brouillé dans ce qu'il essayait de valider et où le code résidait, mais c'est finalement ce que c'était, merci! – curtisk

2

Si vous avez de nombreux contrôles sur un formulaire, il est probable qu'ils sont organisés avec des conteneurs tels que des panneaux et des boîtes de groupe. Lorsque vous réglez l'ordre des onglets, vous devez également tenir compte de l'ordre des conteneurs. Une incohérence entre les ordres de tabulation dans les conteneurs pourrait expliquer le saut étrange. Cela peut se produire notamment si deux ou plusieurs contrôles/conteneurs ont la même valeur d'ordre de tabulation, ce qui rend le processus de tabulation arbitraire.

Idée de solution: Bien sûr, la mise à jour et la correction de l'ordre des onglets sont un travail lent et sujet aux erreurs. Il peut vous être utile d'écrire une routine qui itère à travers les conteneurs et les contrôles du formulaire de manière récursive et d'affecter correctement les valeurs des ordres de tabulation. Vous devez définir l'ordre de tabulation en comparant le point d'emplacement de chaque contrôle du conteneur où le point le plus haut et le plus à gauche est le rang «inférieur» et le bas, le composant le plus à droite est le «plus haut». Cela aurait bien sûr besoin d'un alg de tri personnalisé. Et si vous regardez autour, quelque chose comme ça peut déjà être là.

Solution Idée 2: Réfacteur! Diviser et conquérir. Cela prendra du temps, mais si vous déplacez les composants de l'interface utilisateur dans des contrôles utilisateur organisés de manière logique, vous obtiendrez un meilleur contrôle de la base de code. Vous découvrirez également beaucoup de bugs!

+0

Bonne pensée, mais déjà couverte ça, ils sont en fait en groupe logique les boîtes de groupe à l'intérieur, et l'ordre des boîtes de groupe est correct, et les articles sous le groupe ont la bonne désignation de type 10.0.1, 10.0.2 – curtisk

+0

Hmm. Ce milieu zéro dans votre exemple m'inquiète cependant ... Comment cela est-il attribué et géré? –

+0

Je vais mettre à jour la question principale, mais, ces formulaires d'entrée sont tous sur des onglets distincts (contrôle onglet) qui aggrave probablement la douleur:/ – curtisk

1

Il est possible que certains de vos contrôles soient intégrés dans les contrôles du conteneur et que l'ordre des onglets de vos contrôles de conteneur provoque l'apparition du focus comme s'il sautait de manière aléatoire. Assurez-vous que lorsque vous êtes dans l'ordre des onglets, vous portez une attention particulière à l'ordre de tabulation de vos contrôles de conteneur: Assurez-vous qu'aucun d'entre eux n'a le même ordre de tabulation et qu'ils sont commandés logiquement avec l'ordre de tabulation vos contrôles individuels.

Sinon, vous devez vérifier votre code d'interface utilisateur pour certains appels au Control.Focus qui pourraient interférer avec l'ordre de tabulation par défaut lors de l'exécution. Un code de validation peut être en train de changer le focus pour le contrôle "suivant" après qu'il se termine avec succès (ou "revenir" à un contrôle précédent si la validation a échoué).

+0

vérifier ma réponse à Paul, déjà descendu le chemin du groupe, mais sache que je vais devoir chercher des sauts de Focus pour voir si c'est le cas – curtisk