2016-07-19 79 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斯坦利和上升(對不起!)