9
votes

WINFORMS BIND ENUM aux boutons radio

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
}


0 commentaires

4 Réponses :


2
votes

Pourriez-vous créer trois propriétés booléennes: xxx

puis lier à mychoice_choice1 et les autres?


0 commentaires

0
votes

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


0 commentaires

8
votes

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. xxx pré>

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


0 commentaires

0
votes

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> xxx pré>

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> xxx pré>

lorsque vous l'utilisez. Vous ajoutez simplement le code suivant dans l'événement Form_Load. P>

Enum.TryParse(settings.category, out Category category);


0 commentaires