簡體   English   中英

有沒有辦法找出是否在面板內檢查了動態創建的數組復選框?

[英]Is there a way to find out if a dynamically created Array CheckBoxes are check inside a panel?

我已經動態創建了數組CheckBoxes並且如果沒有在Panel內選擇它們,則想進行適當的驗證,但是如果我繼續使用for循環,則MessageBox會繼續出現。

誰能幫助我找到更好的方法? 我只想檢查是否在面板內部選中了復選框控件,如果沒有選中,則顯示一個messagebox ,上面將顯示“選擇復選框!”。 一次

這是我為面板中動態創建的復選框編寫的代碼:

for (int z = 0; z <= dataGridView.Columns.Count - 1; z++)
{
    chk[z] = new CheckBox();
    chk[z].Name = dataGridView.Columns[z].Name;
    chk[z].Text = dataGridView.Columns[z].Name;
    chk[z].AutoCheck = true;
    chk[z].Bounds = new Rectangle(10, 20 + padding + dynamicHeight, 40, 22);
    chk[z].Location = new Point(0, dynamicHeight);
    chk[z].Size = new Size(120, 21);
    panelCol.BackColor = Color.White;
    //MessageBox.Show(chk[z].Name + "" + dataGridView.Columns[z].Name);
    panelCol.Controls.Add(chk[z]);
    //panelCol.AutoScrollMinSize = new Size(0, 100);
    dynamicHeight += 20;
    panelCol.Size = new Size(120, dynamicHeight);
}

這是我提出的代碼:

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!");
        }
    }

};

ValidateCheck方法:

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();
}

這是從面板中獲取所有復選框(使用Linq選中)的另一種方法:

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

請按如下所示更改驗證方法,

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
   }

}

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM