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
반응형
'개발 > C#' 카테고리의 다른 글
C# - 닷넷 프레임워크(.Net FrameWork)와 C# (4) | 2020.06.16 |
---|---|
C# - 명령 프롬프트(CMD)로 컴파일 해보기(2) (1) | 2020.06.14 |
C# - 명령 프롬프트(CMD)로 컴파일 해보기(1) (0) | 2020.06.14 |
C# - null 병합 연산자에 대해서(?? 연산자) (4) | 2020.05.27 |
C# - Nullable 에 대해서(변수타입 뒤에 물음표) (6) | 2020.04.07 |
댓글