0

当我不知道用户在运行时会选择多少复选框时,如何将动态创建的复选框的名称存储在字符串数组中。假设我有 10 个动态复选框,并且在 10 个用户中随机选择 6 个复选框,现在如何获取这些选定复选框的名称并将它们存储在字符串数组中。

我知道如何在动态复选框上使用事件处理程序,但是当我不知道数组的大小时如何声明字符串数组时感到困惑。

这是我到目前为止所做的 -

    private void CheckBoxCheckedChanged(object sender, EventArgs e)
    {
        CheckBox c = (CheckBox)sender;
        //Label myLabel;
        String str = null;
        if (c.Checked == true)
        {
            str = c.Text;
            gpBox[gpcount] = new GroupBox();
            gpBox[gpcount].Name = "gpBox" + Convert.ToString(count);
            gpBox[gpcount].Text = str;
            gpBox[gpcount].Location = new Point(5, gpposition);
            gpBox[gpcount].AutoSize = true;
            this.Controls.Add(gpBox[gpcount]);

            aCommand3 = new OleDbCommand("select * from batch_tbl where batch_branch LIKE '" + str + "'", main_connection);
            aAdapter3 = new OleDbDataAdapter(aCommand3);
            ds3 = new DataSet();
            aAdapter3.Fill(ds3, "app_info");
            ds3.Tables[0].Constraints.Add("pk_bno", ds3.Tables[0].Columns[0], true);
            int batch_count = ds3.Tables[0].Rows.Count;
            batchCheckBox = new CheckBox[batch_count];
            //filling the groupbox with batch code by generating dynamic checkboxes
            for (int j=0; j < batch_count; ++j)
            {
                batchCheckBox[j] = new CheckBox();
                batchCheckBox[j].Name = "batch" + Convert.ToString(k);
                batchCheckBox[j].Text = ds3.Tables[0].Rows[j][1].ToString();
                Console.WriteLine(batchCheckBox[j].Text);
                batchCheckBox[j].Location = new System.Drawing.Point(104 * position, 30);
                gpBox[gpcount].Controls.Add(batchCheckBox[j]);
                batchCheckBox[j].CheckStateChanged += new System.EventHandler(BatchBoxCheckedChanged);
                position++;
                count++;
                Console.WriteLine(batchCheckBox[j].Name);
                k++;
            }
            position = 1;
            gpposition += 100;
        }
        else
        {
            count--;
            this.Controls.RemoveByKey("lbl" + c.Name);
            this.Update();
        }
    }
    int total_batch = 1;
    string[] batchname;
    private void BatchBoxCheckedChanged(object sender, EventArgs e)
    {
        CheckBox batchBox = (CheckBox)sender;
        //Here I want to store name of checkbox in array
        if (batchBox.Checked == true)
        {
            batchname = new String[total_batch];
            total_batch++;

        }
        else
        {
        }
    }
4

2 回答 2

0

谢谢大家

}
        list = new List<string>();
    }

    private void BatchBoxCheckedChanged(object sender, EventArgs e)
    {
        CheckBox batchBox = (CheckBox)sender;
        //Here I want to store name of checkbox in array

        if (batchBox.Checked == true)
        {
            list.Add(batchBox.Text);  
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        foreach(string prime in list) // Loop through List with foreach
        {
            Console.WriteLine(prime);
        }
    }       

这个完成了

于 2013-05-13T08:42:23.370 回答
0

你可以试试这个:

    //Gets all checkbox's on the form
    List<CheckBox> chks = Controls.OfType<CheckBox>().ToList();

    //take only those who is checked, and select only their name property
    List<string> names = chks.Where(c => c.Checked).Select(c => c.Name).ToList();

更新

为了进行测试,您可以打印所选名称的列表:

string txt = "";
foreach(string name in names)
{
   txt += name+" \n\r";
}
MessageBox.Show(txt);
于 2013-05-13T06:52:55.080 回答