728x90
반응형
Winform 모든 컨트롤 조회하기
1. 전체 Control 객체를 담을 변수를 선언한다. Control[] controls =
2. 모든 컨트롤을 조회하기 위한 함수를 정의한다. GetAllControlsRecursive
- 모든 컨트롤을 담아서 반환하기 위해 반환형은 Control[]
- Winform의 Control에 대해서 조회하기 위해 매개변수는 Control 타입으로 지정한다.
// 현재 Winform 최상단 부모 객체를 전체 조회할 함수에 인자(this)로 넣는다.
Control[] controls = GetAllControlsRecursive(this);
// 모든 컨트롤 조회하기 함수
public Control[] GetAllControlsRecursive(Control containerControl)
{
// 중량
}
*부모 컨트롤에서 자식 컨트롤을 조회해 나가는 과정에서 Container (panel과 같은) 타입을 조회하고 나서는 조회를 멈춘다. 쉽게 말하면 자식 컨트롤을 바로 조회할 수는 있지만, 자식 컨트롤이 컨테이너 타입인 경우 그 하위에 있는 것들은 조회하지 않는다. (자식은 조회하고, 자손은 조회하지 않는다.)
따라서 Winform 위에 모든 컨트롤을 조회하는 함수는,
Container 타입을 조회하여도 그 하위에 있는 모든 컨트롤들을 조회할 수 있도록 재귀함수로 구현한다.
public Control[] GetAllControlsRecursive(Control containerControl) // Main object부터 시작
{
List<Control> controlList = new List<Control>();
foreach (Control ctl in containerControl.Controls) // 자식 컨트롤을 하나씩 조회하여
{
controlList.Add(ctl); // list에 넣는다.
if (ctl.Controls.Count > 0) // 자식 컨트롤의 자식 컨트롤들이 0보다 많으면
{ // Container 이므로
controlList.AddRange(GetAllControlsRecursive(ctl)); // container를 재귀호출한다.
// 그리고 그 값들은 AddRange로 리스트에 추가된다.
}
}
return controlList.ToArray(); // 콘트롤 리스트를 반환한다.
}
재귀 과정을 통해 모든 컨트롤을 조회할 수 있다.
728x90
반응형
'C#' 카테고리의 다른 글
C# Windows Forms | 윈폼 | CheckedListBox에서 아이템 이름 한 번 클릭 시 체크박스 체크하기 (0) | 2021.03.08 |
---|---|
C# Winform ComponentOne C1NumericEdit 천 단위 콤마(Comma) 표시하기 (1) | 2021.02.23 |
[C# Winform] fpSpread에 세팅된 콤보박스의 옵션 수 구하기 (0) | 2021.02.22 |
Winform에서 fpSpread에서 마우스 우클릭 감지 (0) | 2020.12.02 |
[C#]FpSpread 행 다중 선택 불가능하게 하기, 행 하나 선택하게 하기 (0) | 2020.10.27 |