0 votes

Un modèle pour les boutons radio, chacun sélectionnant un "ensemble" d'autres contrôles ?

J'ai remarqué un scénario courant dans le développement d'interfaces utilisateur (à la fois pour le Web et les clients lourds) où il y a un groupe de boutons radio, et où cliquer sur un bouton radio signifie que vous voulez "sélectionner" un certain "ensemble" d'autres contrôles (pour simplifier, disons que ce sont tous des zones de texte).

À titre d'exemple, les astérisques représentent des boutons radio et les tirets bas des zones de texte. Chaque bouton radio doit "sélectionner" le "jeu" de zones de texte sur la même ligne.

*   ________   ________  __________

*   ________

*   ________   ________

Traduit en exigences d'interface utilisateur, cela signifie

  1. Chaque fois que l'utilisateur clique sur une radio toutes les valeurs des zones de texte no dans son "ensemble" devrait être effacée, et

  2. Chaque fois que l'utilisateur commence à taper dans une zone de texte, le bouton radio qui la contrôle doit être automatiquement sélectionné (ce qui implique également l'effacement des autres valeurs de la zone de texte, comme ci-dessus).

Le problème pour moi est que programmer cela correctement est étonnamment difficile. Il y a beaucoup d'événements à gérer et les gestionnaires peuvent provoquer le déclenchement d'autres événements, etc.

Existe-t-il un "modèle" que l'on peut suivre pour cela ?

0voto

Michael Zuschlag Points 3784

En fait, du point de vue de la convivialité, je vous recommande de ne pas effacer les valeurs des zones de texte lorsque le bouton radio est désélectionné. Lorsqu'un utilisateur passe d'un bouton radio à un autre, vous ne devez pas détruire son travail. En n'effaçant pas les zones de texte, un utilisateur peut revenir à l'option A après l'option B sans avoir à saisir à nouveau les valeurs des zones de texte.

Vous pouvez désactiver les zones de texte lorsque le bouton radio associé est désélectionné afin d'indiquer à vos utilisateurs que les valeurs de la zone de texte ne s'appliquent pas. Vous devriez probablement aussi faire en sorte que la sélection d'un bouton radio place automatiquement le focus dans la première zone de texte associée afin d'éviter à l'utilisateur un clic de souris supplémentaire ou une pression sur la touche de tabulation. Dans la plupart des cas, cela sera aussi efficace que si l'utilisateur cliquait sur la zone de texte souhaitée dans votre conception originale.

Cette conception simplifie également votre code. Il vous suffit de définir l'activation et le focus dans l'événement Update pour les boutons radio.

0voto

Rafał Dowgird Points 16600

Il y a beaucoup d'événements à gérer

Une petite hiérarchie de contrôleurs pourrait être utile. Les contrôleurs de ligne sont responsables du traitement des événements provenant des widgets d'une seule ligne et de la sélection/désélection d'une ligne particulière. Contrôleur d'ensemble de rangées responsable de la transmission des notifications "autre rangée sélectionnée" aux rangées de l'ensemble.

On pourrait appeler cela du MVC hiérarchique (voilà, un modèle :-) ), bien que ce nom me semble trop lourd pour décrire ce qui précède.

et les gestionnaires peuvent provoquer le déclenchement d'autres événements, etc.

Il semble que le travail des contrôleurs de ligne consiste à supprimer les événements secondaires déclenchés lors de la sélection/désélection d'une ligne. Un contrôleur de rangée sait si la sélection/désélection est en cours d'exécution et peut donc atténuer les événements secondaires. Je ne suis pas sûr qu'il s'agisse d'un modèle pour cela. Peut-être un motif de drapeau booléen pour indiquer qu'une sélection est en cours :-)

0voto

andrepf Points 1

Vous pouvez utiliser le modèle d'interface utilisateur "Subform" et ses modèles associés (sous-formulaire alternatif, sélection de sous-formulaire, etc.).

Vous pouvez lire une explication de ces modèles aquí .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X