본문 바로가기
개발/C#

C# - 윈도우폼 자식 컨트롤 찾기

by E-nan 2020. 4. 14.
728x90
반응형

 

안녕하세요. E-nan 입니다.

 

 

윈도우폼을 이용해 프로그램 개발을 하던 중,

코드상에서 자식 컨트롤들에 접근해서 원하는 컨트롤만 따로 접근을 해야 하는 상황이 있었습니다.

 

각 컨트롤마다 속성도 다르고, 이름도 다르기 때문에

제가 찾고싶은 컨트롤, 그중에서도 어떤 컨트롤에 포함되어있는

자식 컨트롤을 찾기가 쉽지 않았습니다.

 

그렇게 몇번 구글링을 하다가 재귀를 통해서

원하는 컨트롤을 찾는 방법을 발견했습니다.

 

첫번째 주석부분은

컨트롤의 종류로 찾는 방법입니다.

컨트롤이 DataGridView 이면, conList 리스트에 추가해줍니다.

 

두번째 주석부분은

컨트롤의 이름같은 속성으로 찾는 방법입니다.

컨트롤의 이름이 "그리드뷰" 이면, conList에 추가해줍니다.

 

세번째 주석부분은

재귀하는 부분입니다.

해당하는 컨트롤의 자식컨트롤이 있으면 파라미터로 해당 컨트롤을 넘겨줍니다.

 

 

생각보다 간단하지 않나요?

어떠한 폼에 모든 컨트롤을 찾고싶다면 GetControls의 파라미터에 폼을 넘겨주면

해당하는 폼에 있는 모든 컨트롤에 접근할 수 있습니다.

 

따라서 원하는 패널이나, 그룹박스 등 의 자식컨트롤만 검사하고싶다면

폼 대신 해당하는 컨트롤을 넘겨주면 됩니다.

 

 

private Control[] GetControls(Control con)
{
      var conList = new List<Control>();

      foreach (Control control in con.Controls)
      {
            //컨트롤 속성으로 찾는 방법
            if (control is DataGridView)
            conList.Add(control);

            //컨트롤 이름으로 찾는 방법
            if (control.Name == "그리드뷰")
            conList.Add(control);

            //주석
            if (control.Controls.Count > 0)
            conList.AddRange(GetControls(control));
      }

      return conList.ToArray();
}

 

공감이나 도움이 되셨다면, 공감버튼을 눌러주세요ㅎㅎ

질문이나 오타, 잘못된 내용 등은 댓글로 남겨주시면 감사하겠습니다 :)

 

728x90
반응형

댓글