2017-09-27 74 views
0

我正在制定學生考勤系統。我正在創建動態控制並從數據庫分配值。現在我想知道如何找到想要的動態控制,以及如何從中獲得價值。如何找到具體的動態控制並獲得價值

我不知道如何使用foreach循環找到想要的控制。

這是我創建動態控件的代碼。

public void genControl(StudentAttendence sta) 
{ 
    StudentAttendenceBSLDAL stabd = new StudentAttendenceBSLDAL(); 
    List<string[]> liName = stabd.takStudent(sta); 
    counts = Convert.ToInt16(stabd.takStudent(sta).Count); 
    for (int i=0; i< stabd.takStudent(sta).Count;i++) 
    { 
     for(int j = 0; j<liName[i].Count();j++) 
     { 
      Label lblStudentname = new Label(); 
      Label lblStId = new Label(); 
      lblStId.Name = "lblStId"+i.ToString()+j.ToString(); 
      lblStudentname.Name = "liName"+i.ToString()+j.ToString(); 
      lblStId.AutoSize = true; 
      lblStudentname.AutoSize = true; 
      if (j==0) 
      { 
       lblStId.Text = liName[i][j].ToString(); 

      } 
      if(j==1) 
      { 
       lblStudentname.Text = liName[i][j].ToString(); 

      } 
      lblStId.AutoSize = true; 

      lblStudentname.AutoSize = true; 
      if (i == 1) 
      { 
       lblStId.Location = new Point(41, 229); 
       lblStudentname.Location = new Point(153, 7); 
      } 
      else 
      { 
       lblStId.Location = new Point(3, 7 + 20); 
       lblStudentname.Location = new Point(153, 7 + 20); 
      } 

      this.Controls.Add(lblStId); 
      panel1.Controls.Add(lblStudentname); 
     } 
     CheckBox cba = new CheckBox(); 
     cba.Name = "cba" + i.ToString() ; 
     cba.Text = "A"; 
     cba.AutoSize = true; 

     CheckBox cbp = new CheckBox(); 
     cbp.Name = i.ToString() ; 
     cbp.Text = "P"; 
     cbp.AutoSize = true; 

     CheckBox cbl = new CheckBox(); 
     cbl.Name = "cbl" + i.ToString() ; 
     cbl.Text = "L"; 
     cbl.AutoSize = true; 
     if (i == 1) 
     { 
      cbp.Location = new Point(590, 3); 
      cba.Location = new Point(631, 3); 
      cbl.Location = new Point(670, 3); 
     } 
     else 
     { 
      cbp.Location = new Point(590, 3 + 23); 
      cba.Location = new Point(631, 3 + 23); 
      cbl.Location = new Point(670, 3 + 23); 
     } 
     panel1.Controls.Add(cbp); 
     panel1.Controls.Add(cba); 
     panel1.Controls.Add(cbl); 
    } 
} 

這是按鈕控制事件,我試圖找到控件並獲取它的值。

private void button2_Click(object sender, EventArgs e) 
{ 
    StudentAttendence sta = new StudentAttendence(); 
    StudentAttendenceBSLDAL stabd = new StudentAttendenceBSLDAL(); 
    // List<string[]> liName = stabd.takStudent(sta); 
    for (int i=0;i<counts;i++) 
    { 
     CheckBox cbP = panel1.Controls.OfType<CheckBox>().FirstOrDefault(b => b.Name.Equals("cbp"+i.ToString())); 

    // Label stid = panel1.Controls.Find("lblStId" + i.ToString(), false).First() as Label; 
     if(!cbP.IsChecked) 
     { 
      MessageBox.Show("control found"); 
     } 
    } 
} 
+0

我建議您將動態創建的控件保存在自己的數據結構中,因此如果需要可以使用它來處理它們 –

+0

Florian Koch我無法理解此「保存在自己的數據結構中動態創建控件「。 –

+2

你只是忘了設置名稱:'cbp.Name = i.ToString();'應該是'cbp.Name =「cbp」+ i.ToString();' –

回答

0

您可以將控制列表保存到SortedList中。 您可以使用此排序列表進行進一步處理