2016-07-19 50 views
0

我有两个16个复选框的数组,我希望在for语句运行时逐渐检查。它看起来像这样:“名字‘cboxes’不在当前情况下存在”控制多个复选框阵列

public void Cycle() 
{ 
    if (host == false) 
     { 
      CheckBox[] cboxes = relayRow.CheckBoxes; 
     }     
     else if (host == true) 
     { 
      CheckBox[] cboxes = relayRow2.CheckBoxes; 
     } 
    for (int i = 0; i < 16; i++) 
     {    
      cboxes[i].Checked = true; 
     } 
} 

我得到一个红色的线下“cboxes” for语句说 如果我一次只使用一个,它可以很好地工作,所以我的阵列应该没有问题。在一次工作之一是如下:

public void Cycle() 
    {    
     CheckBox[] cboxes = relayRow.CheckBoxes; 

     for (int i = 0; i < 16; i++) 
     { 
      cboxes[i].Checked = true; 
     } 
    } 

还应有没有问题,因为我已经在其他地方使用它和它的作品如预期我的布尔“主机”。我只是试图在16个数组之间进行切换。提前致谢。

回答

2

你只需要申报if声明以外的变量:

public void Cycle() 
{ 
    CheckBox[] cboxes = null; 
    if (host == false) 
    { 
     cboxes = relayRow.CheckBoxes; 
    }     
    else if (host == true) 
    { 
     cboxes = relayRow2.CheckBoxes; 
    } 
    for (int i = 0; i < 16; i++) 
    {    
     cboxes[i].Checked = true; 
    } 
} 

或只是

public void Cycle() 
{ 
    CheckBox[] cboxes = host ? relayRow2.CheckBoxes : relayRow.CheckBoxes; 
    for (int i = 0; i < 16; i++) 
    {    
     cboxes[i].Checked = true; 
    } 
} 
0

稍有改变d斯坦利的回答,不知道你是否需要使用数组和for循环这迫使你硬编码复选框的数量,但这个shoud也适用:

public void Cycle() 
    { 
     var cboxes = host ? relayRow2.CheckBoxes : relayRow.CheckBoxes; 
     cboxes = (from checkBox in cboxes.ToList() 
      select new CheckBox { Checked = true}).ToArray(); 
    } 

P.S.我没有足够的声望点评论,否则我只会评论你的答案D斯坦利和上升(对不起!)