2016-07-19 2 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» в течение заявления о том, Если я использую только один, он отлично работает, поэтому не должно быть проблем с моими массивами. Работа по одному выглядит следующим образом:

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 Стэнли, не уверен, что если вам нужно использовать массивы и для цикла, который заставляет вас жестко кодировать количество флажков, но это также работает:

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 Стэнли и разоблачил (извините!)

Смежные вопросы