Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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_Loops_Checkbox - Fatal编程技术网

C# 有没有办法确定是否在面板中选中了动态创建的数组复选框?

C# 有没有办法确定是否在面板中选中了动态创建的数组复选框?,c#,arrays,loops,checkbox,C#,Arrays,Loops,Checkbox,我已经动态创建了数组复选框,如果在面板中没有选择任何复选框,我想进行适当的验证,但是如果我继续使用for循环,则消息框会继续出现 有人能帮我找到一个更好的方法吗?我只想检查面板内是否选中了复选框控件,如果未选中,则显示一个消息框,该消息框将显示“选择复选框!”一次 以下是我为面板中动态创建的复选框编写的代码: 用于(int z=0;z//btnValidate事件 { 对于(int z=0;z

我已经动态创建了数组
复选框
,如果在
面板
中没有选择任何复选框,我想进行适当的验证,但是如果我继续使用
for
循环,则
消息框
会继续出现

有人能帮我找到一个更好的方法吗?我只想检查面板内是否选中了复选框控件,如果未选中,则显示一个
消息框
,该消息框将显示“选择复选框!”一次

以下是我为面板中动态创建的复选框编写的代码:
用于(int z=0;z//btnValidate事件
{
对于(int z=0;z
ValidateCheck方法:
publicstaticvoidvalidatecheck(DataGridView-DataGridView,CheckBox[]chk)
{
FileStream fs=newfilestream(@“C:\brandon\InvalidColumnCheck.txt”,FileMode.OpenOrCreate,FileAccess.Write);
StreamWriter sw=新StreamWriter(fs);
sw.BaseStream.Seek(0,SeekOrigin.End);
StringBuilder sb=新的StringBuilder();
十进制数;
sw.WriteLine(“-------------------------------”;
西南书写线(“”);
对于(int j=0;j
请更改验证方法,如下所示:

public List<CheckBox> GetSelectedItems()
{
    List<CheckBox> selectedList = new List<CheckBox>();

    foreach(Control control in panelCol.Controls)  // panelCol is your panel
    {
        if(control is CheckBox)
        {
           CheckBox chkCtrl = control as CheckBox;
           if(chkCtrl.Checked)
           {
               selectedList.Add(chkCtrl);
           }
       }
   }
   return selectedList;
}

btnValidate.MouseClick += (s, e) =>//btnValidate Event
{
   List<CheckBox> selectedItems = GetSelectedItems();
   if(selectedItems.Count == 0)
       MessageBox.Show("Select a CheckBox!");
   else{
       // Continue with other validation for the selected checkboxes from the list
   }

}
public List GetSelectedItems()
{
List selectedList=新建列表();
foreach(panelCol.Controls中的控件)//panelCol是您的面板
{
如果(控件为复选框)
{
复选框chkCtrl=控制为复选框;
如果(chkCtrl.已选中)
{
selectedList.Add(chkCtrl);
}
}
}
返回所选列表;
}
btnValidate.MouseClick+=(s,e)=>//btnValidate事件
{
List selectedItems=GetSelectedItems();
如果(selectedItems.Count==0)
Show(“选择一个复选框!”);
否则{
//继续对列表中选定的复选框进行其他验证
}
}

希望有帮助!

这里是从面板中获取所有复选框的另一种方法,这些复选框已被选中(使用Linq):

List selectedItems=panelCol.Controls.OfType().Where(chk=>chk.Checked.ToList();
btnValidate.MouseClick += (s, e) =>         //btnValidate Event
{
    for (int z = 0; z < dataGridView.Columns.Count - 1; z++ )
    {
        if(chk[z].Checked == true)
        {
            ValidateCheck(dataGridView, chk);

        }
        else if(chk[z].Checked == false)
        {
            MessageBox.Show("Select a CheckBox!");
        }
    }

};
public static void ValidateCheck(DataGridView dataGridView, CheckBox[] chk)
{

    FileStream fs = new FileStream(@"C:\brandon\InvalidColumnCheck.txt", FileMode.OpenOrCreate, FileAccess.Write);
    StreamWriter sw = new StreamWriter(fs);

    sw.BaseStream.Seek(0, SeekOrigin.End);
    StringBuilder sb = new StringBuilder();

    decimal num;
    sw.WriteLine("----------------------------");
    sw.WriteLine("");

    for (int j = 0; j < dataGridView.ColumnCount - 1; j++)
    {
        if (chk[j].Checked == true && chk[j].Name.Contains(dataGridView.Columns[j].Name))
        {
            string column = chk[j].Name;

            for (int k = 0; k < dataGridView.RowCount; k++)
            {
                if (!Decimal.TryParse(dataGridView.Rows[k].Cells[column].Value.ToString(), out num))
                {
                    if (dataGridView.Rows[k].Cells[dataGridView.Columns[column].Name].Value.ToString() == null || dataGridView.Rows[k].Cells[dataGridView.Columns[column].Name].Value.ToString() == "" || dataGridView.Rows[k].Cells[dataGridView.Columns[column].Name].Value.ToString() == column)
                    {

                    }
                    else
                    {
                        //MessageBox.Show("COLUMN" + dataGridView.Columns[j].Name.ToString() + "" + dataGridView.Rows[k].Cells[column].Value.ToString() + "  NOT A DECIMAL!");
                        sb.AppendLine("[Column " + chk[j].Name.ToString().ToUpper() + "] :" + dataGridView.Rows[k].Cells[column].Value.ToString() + "  NOT A DECIMAL!");
                    }
                }
            }
            sb.AppendLine("");
        }
    }
    if (sb.ToString() == null || sb.ToString() == "" || sb.Length < dataGridView.Columns.Count)
    {
        sw.WriteLine("No Errors!");
        sw.WriteLine("");
        sw.WriteLine("----------------------------");
        MessageBox.Show("No errors!");
        Process.Start(@"C:\brandon\InvalidColumnCheck.txt");
    }
    else if (sb.ToString() != null || sb.ToString() != "")
    {
        sw.WriteLine(sb.ToString());
        sw.WriteLine("----------------------------");
        //MessageBox.Show(sb.ToString());
        Process.Start(@"C:\brandon\InvalidColumnCheck.txt");
    }
    sw.Flush();
    sw.Close();
}
public List<CheckBox> GetSelectedItems()
{
    List<CheckBox> selectedList = new List<CheckBox>();

    foreach(Control control in panelCol.Controls)  // panelCol is your panel
    {
        if(control is CheckBox)
        {
           CheckBox chkCtrl = control as CheckBox;
           if(chkCtrl.Checked)
           {
               selectedList.Add(chkCtrl);
           }
       }
   }
   return selectedList;
}

btnValidate.MouseClick += (s, e) =>//btnValidate Event
{
   List<CheckBox> selectedItems = GetSelectedItems();
   if(selectedItems.Count == 0)
       MessageBox.Show("Select a CheckBox!");
   else{
       // Continue with other validation for the selected checkboxes from the list
   }

}
List<CheckBox> selectedItems = panelCol.Controls.OfType<CheckBox>().Where(chk => chk.Checked).ToList();