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);