2014-01-11 3 views
-1

Я добавил флажки динамически в панель и после выполнения, как я могу получить, какие флажки выбираются при нажатии кнопки.Получить проверенное состояние динамически добавленных флажков

public int x=550 ,y=10; 
    private void Form1_Load(object sender, EventArgs e) 
    { 

     var panel1 = new Panel() 
     { 
      Size = new Size(600, 70), 
      Location = new Point(20, 130), 
      BorderStyle = BorderStyle.FixedSingle 
     }; 
     for (int i = 0; i < 20; i++) 
     { 
      CheckBox chkpremiumtickets = new CheckBox(); 
      chkpremiumtickets.Text = " "; 
      chkpremiumtickets.Name = "chkboxpremiumtickets"; 
      chkpremiumtickets.Location = new Point(x,y); 
      panel1.Controls.Add(chkpremiumtickets); 
      x = x - 55; 
      if (x < 55) 
      { 
       y = y+20; 
       x = 550; 
      } 
     } 

     x = 550; y = 10; 

     Controls.Add(panel1); 

ответ

0
foreach (Control control in panel1.Controls) 
{ 
    if (control is CheckBox) 
    { 
    if ((control as CheckBox).Checked) 
    { 
     ... 
    } 
    } 
} 

или просто с помощью LINQ вы можете получить все проверили CheckBox эс внутри панели:

var checkedItems = panel1.Controls.OfType<CheckBox>().Where(c => c.Checked); 
1

Как я могу получить которые флажков выбраны?
Вы можете использовать Checked property of CheckBox (s) для этой цели.

private void button1_click(object sender, EventArgs e) 
    { 
     if(checkBox1.Checked == true) 
      // do something 
     else if (checkBox2.Checked == true) 
      // do something else. 
} 

Для динамического управления, вы можете использовать: -

foreach(Control ctrl in panel1.Controls) 
    { 
     if(ctrl is CheckBox) 
     { 
      CheckBox tempCheckBox = ctrl as CheckBox ; 
      if(tempCheckBox.Checked == true) 
       // do something. 
     } 
    } 

Вы также можете использовать Tag свойство, если вы хотите, чтобы дифференцировать/б различной CheckBox (ов).
Использование LINQ

Func<Control, bool> checkedPredicate = (c) => { 
             if((c is CheckBox)&&(c.Checked == true)) 
              return true ; 
             return false ; 
            } ; 
var checkedList = panel1.Controls.Where(x => checkedPredicate(x)).ToArray() ; 
// this is a array of checkboxes. 
+0

его элементы управления динамичны, поэтому не помогут! –

0

перебирать каждый элемент управления в панели и проверить для конкретного типа управления и проверяемого его имущества тегов для объектов, связанных с его!

Пример ниже работает отлично:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication3 
{ 
    public partial class Form1 : Form 
    { 
     public int x = 550, y = 10; 
     public Form1() 
     { 
      InitializeComponent(); 

      var panel1 = new Panel() 
      { 
       Size = new Size(600, 600), 
       Location = new Point(20, 130), 
       BorderStyle = BorderStyle.FixedSingle, 
       Name = "tktPanel", 
      }; 
      for (int i = 0; i < 20; i++) 
      { 
       CheckBox chkpremiumtickets = new CheckBox(); 
       chkpremiumtickets.Text = " "; 
       chkpremiumtickets.Name = "chk-" + i.ToString(); 
       chkpremiumtickets.Location = new Point(x, y); 
       panel1.Controls.Add(chkpremiumtickets); 
       chkpremiumtickets.Visible = true; 
       x = x - 55; 
       if (x < 55) 
       { 
        y = y + 20; 
        x = 550; 
       } 
      } 

      x = 550; 
      y = 10; 

      Controls.Add(panel1); 
      panel1.Visible = true; 

     } 

     private IEnumerable<string> GetSelectedBtn() 
     { 
      //get selected chk_box 
      var panel = (Panel)this.Controls["tktPanel"]; 

      foreach (var control in panel.Controls) 
      { 
       var chk = control as CheckBox; 
       if (chk != null && chk.Checked) 
       { 
        yield return chk.Name; 
       } 
      } 
     } 


     private void button1_Click(object sender, EventArgs e) 
     { 
      foreach (var chkName in GetSelectedBtn()) 
      { 
       MessageBox.Show(chkName); 
      } 
     } 
    } 
} 
0

Вы можете использовать коллекцию, чтобы сохранить ссылку на флажки, а затем использовать коллекцию для манипулирования флажков, например

Добавить элемент коллекции в форму

private List<CheckBox> dynamicCheckboxes = null; 

Добавить флажки в коллекцию, в то же время, как добавление их к панели

panel1.Controls.Add(chkpremiumtickets); 
this.dynamicCheckboxes.Add(chkpremiumtickets); 

Затем, когда вы хотите, чтобы проверить, какой Флажки проверяются

var checkedPremiumTickets = this.dynamicCheckboxes.Where(c => c.Checked); 

Это также отделяет проверку состояния флажка от формы cont к которым они относятся. Хотя вам это может не нравиться.

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