2011-12-14 2 views
1

두 개의 콤보 상자가있는 창이있는 폼이 있습니다. 내가 성취해야 할 항목은 선택한 인덱스를 0으로 설정하는 항목이있는 모든 콤보 상자를 갖는 것입니다. 모든 콤보 상자를 수동으로 이름을 지정하는 대신 모든 자식을 유형별로 반환하는 함수가 있습니까? 아니면 모든 어린이를 데리고 그 유형을 콤보 박스 요소의 유형과 비교할 것인가?C# 루프 창 양식 요소

@noah, 원래 코드가 작동하지 않았지만 필요한 모든 것은 아이들을 컨트롤이라고 부릅니다 (감사).

private void recursiveSetComboBox(Control element) 
{ 
    foreach (Control a in element.Controls) 
    { 
     if (a.Controls.Count != 0) 
      recursiveSetComboBox(a); 
     else if (a.GetType().Name == "ComboBox") 
     { 
      ComboBox b = (ComboBox)a; 

      b.SelectedIndex = 0; 
     } 
    } 
} 

recursiveSetComboBox(this); 
+0

을 할 수있는'a는 ComboBox'이 유형을 확인하는 것입니다. .. –

답변

3

이것은 내가 어떻게 할 것입니다 :

foreach (var comboBox in myForm.Controls.OfType<ComboBox>()) 
{ 
    comboBox.SelectedIndex = 0; 
} 

콤보 상자 양식에 있지만, 컨테이너 (그룹 상자, 패널 등)를 대신 myForm을의를 사용하여 내부에 직접적 경우.

+0

이것은 .NET 3.5+ 솔루션입니다. –

+0

@ Serge-appTranslator : 예, 물론입니다. –

+0

콤보 상자가 패널 또는 그룹 상자 안에 있으면 어떻게됩니까? – Jonathan

1

당신은 Linq에를 컨트롤을 열거하고 사용하여 필터링 할 수 있습니다 :

foreach (var comboBox in yourForm.Controls.OfType<ComboBox>()) 
{ 
} 
그와

나는 모든 콤보 상자 기본 폼의뿐만 아니라 직계 후손을 설정하는 재귀 함수를 만든

하지만 다른 컨트롤 (패널 안의 콤보 박스와 같은) 안에 컨트롤이 있으면 재귀 버전을 만들어야합니다.

0
당신은 이런 식으로 폼의 컨트롤을 반복 할 수

:

foreach(Control c in MyForm.Controls) 
{ 
//Do something here 
} 

그러나 이러한 컨트롤 중 하나가 groupox 또는 내부 컨트롤이 패널이 될 수 있음을 기억, 그래서 당신은 어떤 종류의가 필요합니다 하나의 컨트롤이 다른 컨트롤 내부에 있더라도 폼의 모든 컨트롤을 반환하는 재귀 함수를 호출 한 다음 해당 형식으로 컬렉션을 필터링합니다.

그러나 우리는 행운이는 유래의 다른 게시물이 문제에 대한 해결책이 있습니다 Get available controls from a form using C#

0

할 수 있습니다이 같은 양식의 컨트롤을 반복 :

foreach (Control control in MyForm.Controls) { 
    // test control type 
} 

참고가 포함하면 그 컨트롤 (예 : 테이블 레이아웃 패널에 넣음) 그러면 컨트롤을 찾지 못합니다.

는 대신 재귀 컨트롤을 찾을 수있는 방법을 호출해야하고 각 컨트롤을 확인하는 재귀 함수를 사용해야합니다 때마다 컨트롤이 has child controls

2

을 찾고 있습니다 여부를 확인하고 아이들의 ... 이 시도 : 컨트롤이 그룹 상자에 포함 된

public void CheckForComboBox(Control crl) 
{ 
foreach (Control crl in this) { 

    if (crl is ComboBox && ((ComboBox)crl).Items.Count > 0) { 
     ((ComboBox)crl).SelectedIndex = 1; 
    } else if (crl.Controls != null && crl.Controls.Count > 0) { 
     CheckForComboBox(crl); 
    } 
} 
} 
0

, 당신은 그냥 쓸 수있는이

foreach (Control group in this.Controls)    //Control combo in this.Controls) 
      { 

       if (group.GetType().Name == "GroupBox") //(con is ComboBox) 
       { 
        foreach (Control con in group.Controls) 
        { 
         if (con.GetType().Name == "ComboBox") 
         { 

          ComboBox combo = (ComboBox)con; 
          _dtStaff=new DataTable(); 
           _dtStaff = _staff.getStaffList(); 
          combo.DataSource = _dtStaff; 
          combo.DisplayMember = _dtStaff.Columns[1].ToString(); 
          combo.ValueMember = _dtStaff.Columns[0].ToString(); 
         } 
        } 
       } 
      }