我的表单上有4组控件,我想将每个控件组绑定到自己的类中,然后能够枚举组,例如
class Group1
{
public static Label label = form.Lbl1;
public static Panel panel = form.pnl1;
}
class Group2
{
public static Label label = form.lbl2;
public static Panel panel = form.pnl2;
}
等通过group4 ......然后......
enum Groups
{
Group1,
Group2,
Group3,
Group4
}
那样而不必写像
这样的东西lbl1.Visible = true;
lbl2.Visible = true;
等等......我可以写
foreach (Group group in Groups)
{
group.label.visible = true;
}
并完成它。我知道我可以创建一个Group类,然后实例化四个实例并进行赋值,将它们添加到List中,然后在列表上执行foreach,但有没有办法在没有实例化的情况下执行此操作?
== UPDATE == 我找到了一些有效的方法,但是我不知道它的良好做法。我相信我的菜鸟编码技巧会在这里闪耀!
在我的Form.Designer.cs上,我从
更改了面板上的修改器private System.Windows.Forms.Panel myPanel1;
private System.Windows.Forms.Panel myPanel2;
到
public static System.Windows.Forms.Panel myPanel1;
public static System.Windows.Forms.Panel myPanel2;
然后在我的Form.cs文件中添加了类和子类......
class ControlGroups
{
public static class Group1
{
public static Panel panel = Form.myPanel1;
}
public static class Group2
{
public static Panel panel = Form.myPanel2;
}
}
稍后在我的代码中我可以做到
ControlGroups.Group1.panel.Visible = true;
ControlGroups.Group2.panel.Visible = true;
并且编译得很好。
有没有办法可以在ControlGroups上做一个foreach?如
foreach (Class group in ControlGroups.Subclasses) {
group.panel.Visible = true;
}
感谢。
答案 0 :(得分:0)
如果您的所有群组都拥有相同的组件,请创建一个通用占位符。
class Group
{
public Label Label { get; set; }
public Panel Panel { get; set; }
}
然后
var group1 = new Group() { Label = label1, Panel = panel1 };
...
var groups = List<Group> { group1, ... };
和我们一样
foreach (var g in groups)
g.Label.Visible = false;
Enum不是用于此目的的便捷工具。您正在寻找类似对象的集合(至少基本相同或具有相同的基础)。
答案 1 :(得分:0)
你可以做的是使用数组/列表:
创建一个类:
class GroupClass
{
public Label labelValue { get; set;}
public Panel panelValue { get; set;}
}
创建类的对象以存储值:
GroupClass first_group = new GroupClass();
first_group.labelValue = form.Lbl1;
first_group.panelValue = form.pnl1;
GroupClass second_group = new GroupClass();
second_group.labelValue = form.Lbl2;
second_group.panelValue = form.pnl2;
将这些组对象添加到列表中:
List<GroupClass> listOfGroups = new List<GroupClass>();
listOfGroups.Add(first_group);
listOfGroups.Add(second_group);
然后做foreach:
foreach (GroupClass groupObj in listOfGroups )
{
groupObj.labelValue.visible = true;
}