Флажок C # для свойства модели - PullRequest
0 голосов
/ 24 июня 2011

Я не уверен, возможно ли это простым способом (с небольшим кодом, который есть).

У меня есть модель:

public static Class TestClass
{
    public static bool Test1 { get; set; }
    public static bool Test2 { get; set; }
    public static bool Test3 { get; set; }
    public static bool Test4 { get; set; }
    public static bool Test5 { get; set; }
    public static bool Test6 { get; set; }
}

Возможно ли это для простогоForeach или другая команда для создания 6 флажков, каждый из которых назван как имя свойства и проверен привязанным к фактическому свойству?

Итак, что я хочу создать для каждого свойства:

var check = new CheckBox { Name = Test1 };
check.CheckedChanged += (s,ea) => { TestClass.Test1 = check.IsChecked; }; 

но для каждого свойства и, возможно, даже с меньшим количеством кода?

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Возможно, но я не знаю, можете ли вы сделать это со статическими свойствами.

public class TestClass
{
    public bool Test1 { get; set; }
    public bool Test2 { get; set; }
    public bool Test3 { get; set; }
}

void Test(Control parent, TestClass tc)
{
    int y = 10;

    foreach (var prop in tc.GetType().GetProperties())
    {
        var cb = new CheckBox(); 
        cb.Name = prop.Name;   
        cb.Text = prop.Name;
        cb.DataBindings.Add(new Binding("Checked", tc, prop.Name));
        cb.Location = new Point(10, y);
        parent.Controls.Add(cb);
        y += 25;
    }
}

пример:

{
    var form = new Form();
    var tc = new TestClass();
    tc.Test2 = true;
    Test(form, tc);
    form.Show();
}
1 голос
/ 24 июня 2011

Может быть по старинке:

public partial class Form1 : Form
{
    CheckBox[] cbs;
    public Form1()
    {
        InitializeComponent();
        cbs = new CheckBox[] { checkBox1, checkBox2 }; //put all in here
        for (int i = 0; i < cbs.Length; i++)
        {
            cbs[i].Name = "myCheckBox" + (i + 1);
            cbs[i].CheckedChanged += new EventHandler(CheckBoxes_CheckedChanged);
        }
    }

    private void CheckBoxes_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cb = sender as CheckBox;
        MessageBox.Show(cb.Name + " " + ((cb.Checked) ? " is checked" : "is not checked").ToString());
    }

    private void buttonStateAll_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        foreach (CheckBox cb in cbs)
        {
            sb.AppendLine(cb.Name + " " + ((cb.Checked) ? " is checked" : "is not checked").ToString());
        }
        MessageBox.Show(sb.ToString());
    }
}

Этот код создаст массив флажков, которые вы хотите иметь в массиве. Затем он покажет вам сообщение, когда вы когда-либо нажмете на него, или появится кнопка, которая покажет вам фактическое состояние всех флажков. Я надеюсь, что это в помощь, прощай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...