带有 For 计数器的复选框名称



我有这个回路和多个LED。指示灯的名称是 Led0、Led1、Led2 等现在我想用这个循环改变每个 Led 的背景,所以我使用计数器 iTeller。我使用 WPF,只能在主窗口中工作。

for (int iTeller = 0; iTeller < bits.Count(); iTeller++)
{
    if (bits[iTeller] == 1)
    {
        //this doesn't work
        *Led+iTeller+.Background = Brushes.Green;*
    }
}

尝试这样 (WPF)

for (int iTeller = 0; iTeller < bits.Count(); iTeller++)
    {
        if (bits[iTeller] == 1)
        {
               object i = this.FindName("Led" & iTeller);
               if (i is CheckBox) 
              { 
                CheckBox k = (CheckBox)i;
                MessageBox.Show(k.Name);
              }
           }
    }

由于很多原因,这不起作用。首先,您的 LED 是某种类型的控件,您需要在变量中,您不能简单地这样调用它们。你使用WPF还是Winforms?您需要一个 LED 列表,然后您可以遍历该列表并将值分配给每个 led

不能像这样解析变量名称,可以使用 Find 方法(至少在 Windows 窗体中)来查找命名控件。

您还可以将控件存储在数组中,这样就可以防止使用相对较慢的查找调用和其他错误检查:

var leds = new CheckBox[] { Led0, Led1, Led2, Led3, Led4, Led5, Led6, Led7 };
for (int iTeller = 0; iTeller < bits.Count(); iTeller++)
{
    if (bits[iTeller] == 1)
    {
        leds[iTeller].Background = Brushes.Green;
    }
 }

这有效

for (int iTeller = 0; iTeller < bits.Count(); iTeller++)
            {
                if (bits[iTeller] == 1)
                {
                    var myCheckbox = (CheckBox)this.FindName("Led" + iTeller);
                    myCheckbox.Background = Brushes.Green;
                }
            }

谢谢大家

最新更新