我有这个回路和多个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;
}
}
谢谢大家