Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个模型属性的C#复选框_C#_Winforms_Properties_Checkbox - Fatal编程技术网

每个模型属性的C#复选框

每个模型属性的C#复选框,c#,winforms,properties,checkbox,C#,Winforms,Properties,Checkbox,我不确定是否可以用一种简单的方式实现(只需要很少的代码) 我有一个模型: 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; } publi

我不确定是否可以用一种简单的方式实现(只需要很少的代码)

我有一个模型:

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

但是对于每个属性,甚至可能代码更少?

可能采用旧的方式:

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());
    }
}
公共部分类表单1:表单
{
复选框[]cbs;
公共表格1()
{
初始化组件();
cbs=new CheckBox[]{checkBox1,checkBox2};//将所有内容放在这里
for(int i=0;i
这段代码将创建一个您希望在数组中包含的复选框数组。然后当你点击一个按钮时,它会显示消息,或者有一个按钮,它会给出所有复选框的实际状态。 我希望它能帮上忙,
再见

也许是老办法:

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());
    }
}
公共部分类表单1:表单
{
复选框[]cbs;
公共表格1()
{
初始化组件();
cbs=new CheckBox[]{checkBox1,checkBox2};//将所有内容放在这里
for(int i=0;i
这段代码将创建一个您希望在数组中包含的复选框数组。然后当你点击一个按钮时,它会显示消息,或者有一个按钮,它会给出所有复选框的实际状态。 我希望它能帮上忙,
再见

这是可能的,但我不知道你是否可以用静态属性来实现

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

这是可能的,但我不知道你是否可以用静态属性来做

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

这意味着我仍然需要为每一处房产画一条线。我希望它能“自动”做到这一点。为什么,好的代码不是很好吗?它实际上比使用Linq和lambda表达式更快。是的,但我需要尽可能少的代码。“速度”不是问题。另外,我正处于学习阶段,所以我试图找到不同的做事方式。这是最基本的方法,因此在我的知识中已经存在。当然,这仍然是一个很好的方式,但并不是我想要的。这意味着我仍然需要为每一处房产画一条线。我希望它能“自动”做到这一点。为什么,好的代码不是很好吗?它实际上比使用Linq和lambda表达式更快。是的,但我需要尽可能少的代码。“速度”不是问题。另外,我正处于学习阶段,所以我试图找到不同的做事方式。这是最基本的方法,因此在我的知识中已经存在。当然,这仍然是一个很好的方法,但不是我想要的。我想要的是“ClassName.GetType().GetProperties()”。非常感谢你!顺便说一句:确认它不适用于静态类,因为您需要创建该类的实例。正在查找“ClassName.GetType().GetProperties()”。非常感谢你!顺便说一句:确认它不适用于静态类,因为您需要创建该类的实例。