2011-06-21 23 views

Trả lời

9
List<Control> list = new List<Control>(); 

      GetAllControl(this, list); 

      foreach (Control control in list) 
      { 
       if (control.GetType() == typeof(Button)) 
       { 
        //all btn 
       } 
      } 

     private void GetAllControl(Control c , List<Control> list) 
     { 
      foreach (Control control in c.Controls) 
      { 
       list.Add(control); 

       if (control.GetType() == typeof(Panel)) 
        GetAllControl(control , list); 
      } 
     } 
1

thử này

foreach (var control in this.Controls) 
{ 
    if (control.GetType()== typeof(Button)) 
    { 

     //do stuff with control in form 
    } 

    else if (control.GetType() == typeof(Panel)) 
    { 
     var panel = control as Panel; 
     foreach (var pan in panel.Controls) 
     { 
      if (pan.GetType() == typeof(Button)) 
      { 

       //do stuff with control in panel 
      } 
     } 
    }    

} 
+1

đệ quy có thể sử dụng trong trường hợp Panel chứa một bảng điều khiển khác bằng một nút. –

+0

@Nakul: ahh bạn r @hashi trả lời là hoàn toàn OK. –

5

Đây là những gì tôi đã làm, Tôi đã viết một chức năng đơn giản, khi tôi bấm vào một nút, tôi chọn chỉ kiểm soát bảng và vượt qua nó đến một chức năng cho vòng lặp hơn thông qua điều khiển trên bảng điều khiển đó.

private void cmdfind_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      foreach (Control control in this.Controls) 
      { 
       if (control.GetType() == typeof(Panel)) 
        //AddToList((Panel)control); //this function pass the panel object so further processing can be done 
      }       
     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 
Các vấn đề liên quan