Winforms c# - 将所有布尔值设置为false?

时间:2016-03-10 01:22:30

标签: c# winforms boolean

我在我的表格中声明了一些由按键触发的布尔值。基本上,我想要它,所以当触发if语句时,我的表单中的所有布尔变量都为false 。我在if语句中有以下内容;

//Spike contact
        if (pbPlayer.Right > pbSpike1.Left && pbPlayer.Right < pbSpike1.Right && pbPlayer.Bottom > pbSpike1.Top || pbPlayer.Left < pbSpike1.Right && pbPlayer.Left > pbSpike1.Left && pbPlayer.Bottom > pbSpike1.Top)
        {
            timer1.Stop();
            MessageBox.Show("Gameover!");
            pbPlayer.Location = ReSpawn;
            timer1.Start();
            foreach (bool Movement in this.Controls)
            {
                Movement = false;
            }
        }

当我尝试将移动设置为false时,它表示它不可分配,因为它是一个foreach迭代。

2 个答案:

答案 0 :(得分:1)

我认为最好明确地为成员变量赋值,避免使用容易出错的自动逻辑。

作为选项,您可以使用反射来查找它们,然后设置它们的值 添加using System.Reflection;,然后使用下面的代码,您可以找到所有非公共布尔成员字段并将其设置为false

this.GetType().GetFields(BindingFlags.NonPublic | 
                         BindingFlags.Instance |
                         BindingFlags.DeclaredOnly)
    .Where(x => x.FieldType == typeof(bool))
    .ToList()
    .ForEach(f =>
    {
        f.SetValue(this, false);
    });

答案 1 :(得分:0)

我看到你正在尝试做什么,但是你却误导foreachforeach语句适用于数组和集合。表示集合元素的变量必须具有与集合的每个元素匹配的类型。您不能使用foreach过滤集合以查找与您指定的类型匹配的属性。

this.Controls中的内容必须全部来自System.Windows.Forms.Control。复选框可以在该集合中,但bool类型的变量不能,因为bool(确切地说System.Boolean)不是从System.Windows.Forms.Control派生的。