2008-11-26 21 views
3

Quelle est la meilleure façon d'implémenter une grille 2D de boutons radio afin de ne sélectionner qu'une seule option dans chaque colonne et une option dans chaque ligne?Quelle est la meilleure façon d'implémenter une grille 2D de boutons radio?

+0

Langue? Environnement de développement? –

+0

Il y a quelques problèmes de comportement (en supposant que le comportement soit pertinent): 1. Supposons qu'un bouton radio (1, 2) est sélectionné. 2. En outre, un bouton radio (2, 1) est également sélectionné. 3. L'utilisateur a appuyé sur (1, 1). Mais les deux boutons radio en ligne et en colonne sont sélectionnés. Devrait-il ignorer l'entrée ou désélectionner un (lequel)? – luiscubal

+0

Puisqu'il l'a étiqueté winforms, on peut normalement supposer qu'il s'agit d'un problème .net. – Jeffrey

Répondre

2

Un tableau 1D de tableaux 1D de boutons radio. Chaque ligne (ou colonne) utiliserait la fonctionnalité du bouton radio normal, tandis que chaque colonne (ou rangée) serait mise à jour par une boucle appelée chaque fois qu'un bouton radio individuel est basculé.

+0

J'utiliserais JavaScript (par exemple, jQuery) pour désactiver les clics qui provoqueraient l'activation de deux boutons sur la même colonne (ou ligne) - plus un contrôle backend –

+0

@WalterTross La plupart des navigateurs ne peuvent pas désélectionner un bouton radio, il serait donc fastidieux ou impossible de mélanger les sélections afin de se conformer si certains clics n'étaient pas autorisés. – Sparr

+0

pourquoi auriez-vous besoin de désélectionner les boutons radio? Il suffit simplement de désactiver les clics –

0

Quelque chose comme ça?

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class Program { 

    static RadioButton[] bs = new RadioButton[9]; 

    static void HandleCheckedChanged (object o, EventArgs a) { 
     RadioButton b = o as RadioButton; 
     if (b.Checked) { 
      Console.WriteLine(Array.IndexOf(bs, b)); 
     } 
    } 

    static void Main() { 
     Form f = new Form(); 
     int x = 0; 
     int y = 0; 
     int i = 0; 
     int n = bs.Length; 
     while (i < n) { 
      bs[i] = new RadioButton(); 
      bs[i].Parent = f; 
      bs[i].Location = new Point(x, y); 
      bs[i].CheckedChanged += new EventHandler(HandleCheckedChanged); 
      if ((i % 3) == 2) { 
       x = 0; 
       y += bs[i].Height; 
      } else { 
       x += bs[i].Width; 
      } 
      i++; 
     } 
     Application.Run(f); 
    } 

} 

Cordialement, Tamberg

+0

Cela crée un groupe de boutons 2D unique qui permet de sélectionner un seul bouton dans le groupe entier. Dans ma question, j'ai précisé qu'il devrait y en avoir un par rangée et un par colonne (ce serait un total de trois sur neuf boutons sélectionnés dans six groupes, par exemple). –

0

Vous pouvez aborder cela avec une collection personnalisée et DataBind les boutons radio.

Chaque enfant aurait une propriété pour la ligne et une propriété pour la colonne ainsi que l'indicateur de valeur vrai/faux, qui déclenche un événement lorsqu'il est changé en vrai via un clic ou une pression sur une touche.

La logique de la classe de collecte répondrait à la modification de valeur et passerait en revue les autres enfants de la même ligne et de la même colonne pour leur indiquer qu'ils devaient être faux.

Si vous ne voulez pas de connexion de données, vous pouvez également le faire avec une collection de contrôles utilisateur.