public enum AAA
    {
A1,A2,A3,A4,A5
    }上面是一个枚举类型,我现在有5个checkbox,每个控件对应AAA里面的一个值,
现在在提交的时候,我想检查这5个checkbox,比如有最后两个checkbox被勾选的话,那么
AAA aaa = AAA.A4|AAA.A5;
如果是前两个checkbox被勾选的话,那么
AAA aaa = AAA.A1|AAA.A2;
这样的。请问我要怎么做到这一点?我的问题是怎么做到这一点,不是怎么判断,判断我会的,只要用aaa.CompareTo()就可以了。

解决方案 »

  1.   

    对你定义的枚举添加FlagsAttribute位域自定义属性:
    [FlagsAttribute] 
        enum MyColor : short
        {
            Black,
            Red,
            Green,
            Blue
        };
     MyColor c;
    if(c==MyColor.Black|MyColor.Red)
      

  2.   

    你的回答貌似不能解决这个问题。
    我的问题是根据checkbox 来判断aaa 的值。并不是根据aaa判断其他的内容。
      

  3.   

    你这个是网页还是WinForm程序呢?你只要给你的checkbox设置值不就好了吗?选中,值为枚举值,不选,值为0.
      

  4.   

    请问要设置哪个属性?
    我的checkbox其实是ToolStripMenuItem
      

  5.   

    这样貌似也不行,因为aaa的值是5个checkbox的值组合成的。
    每个checkbox的值都是aaa的一部分。
      

  6.   

    foreach(Control c in this.Controls)
    {
    if(c is checkbox)
    {
     if(c.Checked){}
    }
    }
      

  7.   

    楼上的兄弟,
    if(c.Checked){}
    }
    这里面的内容你怎么不写呢?我要的就是这里面的内容,外面的部分,我当然是会的。 
      

  8.   

    五个checkbox的勾选状态共同决定aaa的内容的。
    如果只选了第一个那么aaa = AAA.A1,如果同时选择了前面两个,那么aaa = AAA.A1|AAA.A2;这样的
      

  9.   

    需要说明的是,你需要在定义ENUM之前使用[Flags]
            [Flags]
            public enum AAA
            {
                A1, A2, A3, A4, A5
            }        AAA aaa;
            private void checkBox1_CheckStateChanged(object sender, EventArgs e)
            {
                if (checkBox1.Checked)
                {
                    aaa = aaa | AAA.A1;
                }
                else
                {
                    aaa = aaa & (~AAA.A1);
                }            this.Text = aaa.ToString();        }
             以上供参考,你试试看这样行不?在AAA.A1 之前使用位反 ~
      

  10.   

    楼上啊,救救我啊。
    我不知道你那种行不行,但是我判断那里又出问题了。比如我设置
    aaa=AAA.A1|AAA.A2;
    那我下面想判断AAA里有没有包含A1,我该怎么做呢?
      

  11.   

        public enum AAA
        {
            A1, A2, A3 , A4 , A5 , A6
        }
    AAA A = AAA.A1 | AAA.A5 | AAA.A6;
    这样的语句,我查看的时候,却看到
    A的内容是A2|A5,奇怪奇怪。
      

  12.   

    本来是有其他的办法解决的,譬如:
    我用ArrayList存放选项,然后进行判断,这样都很方便 ,只是我想进一步的了解枚举,了解一些新的语法。
      

  13.   

    ???从哪里可以看出来我if语句理不顺,另外,这个问题跟if语句能否理顺有什么关系?
      

  14.   

    可能朋友们还没有真正理解的的问题在哪里?
    我原来的实现方式是这样的
    ArrayList aaa = new ArrayList();
    if(checkbox1.checked){
    aaa.Add(1);
    }else{
    aaa.Remove(1);
    }if(checkbox2.checked){
    aaa.Add(2);
    }else{
    aaa.Remove(2);
    }
    ……………………下面就要判断了
    if(aaa.Contain(1)){
    …………
    }
    if(aaa.Contain(2)){
    …………
    }
    ……………………现在用这种方式可以实现,但是我觉得这种形式更像枚举,所以就尝试一下我没有用过的枚举来实现,结果。
      

  15.   


                aaa=AAA.A1|AAA.A2;
                if ((aaa & AAA.A1)== AAA.A1 ) MessageBox.Show("Include A1");
      

  16.   

    代码如下,已经测试过没有问题。    public partial class Form1: Form
        {
            public Form1()
            {
                InitializeComponent();            toolStripMenuItem1.Tag = AAA.A1;
                toolStripMenuItem2.Tag = AAA.A2;
                toolStripMenuItem3.Tag = AAA.A3;
                toolStripMenuItem4.Tag = AAA.A4;
                toolStripMenuItem5.Tag = AAA.A5;
                toolStripMenuItem1.CheckedChanged += new EventHandler(toolStripMenuItem_CheckedChanged);
                toolStripMenuItem2.CheckedChanged += new EventHandler(toolStripMenuItem_CheckedChanged);
                toolStripMenuItem3.CheckedChanged += new EventHandler(toolStripMenuItem_CheckedChanged);
                toolStripMenuItem4.CheckedChanged += new EventHandler(toolStripMenuItem_CheckedChanged);
                toolStripMenuItem5.CheckedChanged += new EventHandler(toolStripMenuItem_CheckedChanged);
            }        void toolStripMenuItem_CheckedChanged(object sender, EventArgs e)
            {
                ToolStripMenuItem item = (ToolStripMenuItem)sender;
                if (item.Checked)
                    a |= (AAA)item.Tag;
                else
                    a ^= (AAA)item.Tag;
            }        public enum AAA
            {
                A1 = 1, A2 = 2, A3 = 4, A4 = 8 , A5 = 16
            }         private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(a.ToString());
            }
        }
      

  17.   

    虽然有点曲折,不过问题是解决了,也让我了解了一些枚举这种东西了,楼上的这种符号“a ^=”我只有在学习C++的时候看到过,写C#就从来没有遇到过,可惜分不够多,要不然我是想多赠送一点的,毕竟是这么经典的用法。(个人觉得,高手莫笑)
    非常感谢qldsrx、spmzfz二位(排名不分先后)。