2016-03-09 2 views
0

Я создаю создателя DTO. Я могу получить имена таблиц и поместить их в datatable. Проблема в том, что я должен создавать флажки динамически с использованием этих имен таблиц, а затем иметь возможность проверять все элементы. Это то, что я смог придумать до сих пор:Динамическое создание флажков из данных datatable

for (int i = 0; i < dtable.Rows.Count; i++) 
     { 
      string cbName = dtable.Rows[i][0].ToString(); 
      //Console.WriteLine(dtable.Rows[i][0]); 
      CheckBox box = new CheckBox(); 
      box.Tag = i.ToString(); 
      box.Text = cbName; 
      box.AutoSize = true; 
      box.Location = new Point(10, i * 50); //vertical 
      //box.Location = new Point(i * 50, 10); //horizontal 
      this.Controls.Add(box); 
     } 

dtable уже имеет названия и создать флажки. Однако они выходят за пределы области формы, могут видеть не более 10 из них. Кроме того, как я могу зарегистрировать, какие поля проверяются во время выполнения?

+0

Когда вы говорите, «вне границ», вы имеете в виду они, оказываемые за пределами формы видимым площадь? –

+0

да, они, позвольте мне исправить эту часть – EvsizTospaa

+0

Почему бы просто не добавить полосу прокрутки? Или используйте [FlowLayoutPanel] (https://msdn.microsoft.com/en-us/library/system.windows.forms.flowlayoutpanel (v = vs.110) .aspx) вместо абсолютного позиционирования? –

ответ

1

Вы можете либо поместить свои CheckBoxes в список, а затем подсчитать отмеченные.

List<CheckBox> lstBoxes = new List<CheckBox>(); 

// create box 
... 

lstBoxes.Add(box); 

// Checking for checked boxes (eg. on form exit) 
var checkedBoxes = lstBoxes.Where(b => b.Checked); 

Или, когда вы создаете свои флажки, добавить событие на проверены изменения:

box.CheckedChanged += (sender, e) => 
     { 
      var senderAsBox = sender as CheckBox; 

      if (senderAsBox == null) return; 

      var state = senderAsBox.Checked; 

      // Do you stuff then... 
     }; 
Смежные вопросы