如何创建自定义类的枚举?

时间:2014-02-01 17:43:35

标签: c# enums

我的表单上有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;
}

感谢。

2 个答案:

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