Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在字符串数组中存储动态复选框的名称_C#_Arrays - Fatal编程技术网

C# 如何在字符串数组中存储动态复选框的名称

C# 如何在字符串数组中存储动态复选框的名称,c#,arrays,C#,Arrays,当我不知道用户在运行时将选择多少复选框时,如何将动态创建的复选框的名称存储在字符串数组中。 假设我有10个动态复选框,用户从10个复选框中随机选择6个复选框,现在如何获取这些选中复选框的名称并将其存储在字符串数组中 我知道如何在动态复选框上使用事件处理程序,但在不知道数组的大小时,我不知道如何声明应变数组 这就是我到现在为止所做的- private void CheckBoxCheckedChanged(object sender, EventArgs e) {

当我不知道用户在运行时将选择多少复选框时,如何将动态创建的复选框的名称存储在字符串数组中。 假设我有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
        {
        }
    }
private void CheckBoxCheckedChanged(对象发送方,事件参数e)
{
复选框c=(复选框)发送方;
//标记myLabel;
字符串str=null;
如果(c.Checked==true)
{
str=c.文本;
gpBox[gpcount]=新GroupBox();
gpBox[gpcount].Name=“gpBox”+Convert.ToString(count);
gpBox[gpcount].Text=str;
gpBox[gpcount]。位置=新点(5,gpposition);
gpBox[gpcount].AutoSize=true;
this.Controls.Add(gpBox[gpcount]);
aCommand3=新的OleDbCommand(“从批处理tbl中选择*,其中批处理分支类似于“+str+”,主连接);
aAdapter3=新的OLEDB数据适配器(aCommand3);
ds3=新数据集();
aAdapter3.填充(ds3,“应用程序信息”);
ds3.Tables[0]。Constraints.Add(“pk_bno”,ds3.Tables[0]。Columns[0],true);
int batch_count=ds3.Tables[0].Rows.count;
batchCheckBox=新复选框[批次计数];
//通过生成动态复选框,用批处理代码填充groupbox
对于(int j=0;j
您可以尝试以下方法:

    //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();
谢谢大家

}
        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);
        }
    }       
}
列表=新列表();
}
私有无效BatchBoxCheckedChanged(对象发送方,事件参数e)
{
复选框batchBox=(复选框)发件人;
//在这里,我想在数组中存储复选框的名称
if(batchBox.Checked==true)
{
list.Add(batchBox.Text);
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
foreach(列表中的字符串素数)//使用foreach循环列表
{
控制台写入线(主);
}
}       

如果您只想在数组中保存复选框的名称,则可以执行此操作。然后使用
List names=new List()
@Sachine谢谢gor指导请给我一些亮点,这样我就可以使用List了,因为我是List的新手。此外,我还得把这些名字传给另一个人form@user2241865列表基本上是一个可以动态调整大小(容量)的数组。在大多数senarios中更容易使用:)@Jens我尝试了您的代码段,但显示错误-System.Windows.Forms.CheckBox不包含IsChecked@user2241865很抱歉尝试使用
c.Checked
而不是
c.IsChecked
。我已经更新了我的答案@Jens,我也尝试过了,发现了这个错误-无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员阵容?@user2241865哦,最后我缺少了一个
.ToList()
-我已经更新了我的答案@Jens请告诉我哪里错了我看不到所选复选框的名称
}
        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);
        }
    }