每个模型属性的C#复选框
本文关键字:复选框 属性 模型 | 更新日期: 2023-09-27 18:00:05
我不确定用一种简单的方式(只需少量代码)是否可行。
我有一个型号:
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 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 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());
}
}
此代码将创建一个您希望在数组中包含的复选框数组。然后,当你点击某个复选框时,它会向你显示消息,或者有一个按钮,它会给你所有复选框的实际状态。我希望它能有所帮助,再见