Si j'ai trois boutons radio, quelle est la meilleure façon de les lier à un énumé qui a les mêmes choix? E.G.
[] Choice 1 [] Choice 2 [] Choice 3 public enum MyChoices { Choice1, Choice2, Choice3 }
4 Réponses :
Pourriez-vous créer trois propriétés booléennes: puis lier à mychoice_choice1 et les autres? p> p> p>
Je pensais juste que j'ajouterais la façon dont je le fais actuellement. Il n'y a pas de «liaison» comme tel, mais j'espère que cela fait le même travail.
Commentaires Bienvenue. P>
public enum MyChoices { Choice1, Choice2, Choice3 } public partial class Form1 : Form { private Dictionary<int, RadioButton> radButtons; private MyChoices choices; public Form1() { this.InitializeComponent(); this.radButtons = new Dictionary<int, RadioButton>(); this.radButtons.Add(0, this.radioButton1); this.radButtons.Add(1, this.radioButton2); this.radButtons.Add(2, this.radioButton3); foreach (var item in this.radButtons) { item.Value.CheckedChanged += new EventHandler(RadioButton_CheckedChanged); } } private void RadioButton_CheckedChanged(object sender, EventArgs e) { RadioButton button = sender as RadioButton; foreach (var item in this.radButtons) { if (item.Value == button) { this.choices = (MyChoices)item.Key; } } } public MyChoices Choices { get { return this.choices; } set { this.choices = value; this.SelectRadioButton(value); this.OnPropertyChanged(new PropertyChangedEventArgs("Choices")); } } private void SelectRadioButton(MyChoices choiceID) { RadioButton button; this.radButtons.TryGetValue((int)choiceID, out button); button.Checked = true; } }
Je sais que c'est une vieille question, mais c'était le premier à se présenter dans mes résultats de recherche. J'ai trouvé une façon générique de lier des boutons radio à une énumération, voire une chaîne ou un nombre, etc. , puis sur le constructeur de votre formulaire ou sur l'événement de la charge de formulaire, appelez-le. Sur chacun de vos contrôles code> radiobutton code>.
Le DataSource code> est l'objet contenant votre propriété ENUM. Je me suis assuré que
DataSource Code> implémenté le
INOTIFYPROPERTYCHANGED INOTIFYPROPERTYCHANGED est le déclenchement de l'événement
ONPROPERTYCHANGED CODE> dans le Settre de propriétés Enum. P>
AddRadioCheckedBinding(Choice1RadioButton, dataSource, "MyChoice", MyChoices.Choice1);
AddRadioCheckedBinding(Choice2RadioButton, dataSource, "MyChoice", MyChoices.Choice2);
L'affiche de la question n'a pas mentionné ce qu'il lie. Je suppose qu'il lie la classe xxx.properties.Settings. Sinon, cette solution a besoin de la classe de liaison à mettre en œuvre inotifypropertychanged em> interface. et a un indexeur comme celui-ci: p> J'ai essayé le Solution, fournie par Weskertyrant, mais a échoué. P> J'ai dû cliquer deux fois avant que cela ne fonctionne. P> Alors j'ai commencé à résoudre le problème de moi-même. J'ai remarqué que la classe que je suis liée à implémenter l'interface inotifypropertychanged em>. Qui a un PropertyChangeDeventHandler EM> appelé PropertyChangled em>. p> (J'utilise .NET 472 en passant)
J'ai donc écrit une classe d'assistance moi-même. P> lorsque vous l'utilisez. Vous ajoutez simplement le code suivant dans l'événement Form_Load. P> Enum.TryParse(settings.category, out Category category);