반응형
특정 Form의 Control을 가져오려는 경우 Linq의 Cast<>를 사용하면 된다.
아래는 모든 컨트롤 정보를 리스트로 정의하는 코드이다.
1
2
3
|
// Control를 가져오려는 Form의 이름 : myForm
Form myForm;
List<Control> Control_List = myForm.Controls.Cast<Control>().ToList();
|
cs |
TextBox, CheckBox와 같은 특정 Control 요소만 필요한 경우, Linq의 Where를 사용하여 필터링 할 수 있다.
1
2
3
4
5
6
7
|
// TextBox만 필터링
List<Control> Control_List = myForm.Controls.Cast<Control>().Where(p => p is TextBox).ToList();
// TextBox, CheckBox 필터링 : || 로 추가
List<Control> Control_List = myForm.Controls.Cast<Control>().Where(p => p is TextBox || p is CheckBox).ToList();
|
cs |
위 코드에서 문제점은 GroupBox 내부에 있는 Control 들은 찾아내지 못한다는 점이다.
따라서 아래의 코드처럼 모든 Control을 가져오는 코드를 작성해야한다.
재귀 함수를 아래와 같은 메서드를 만든다.(Control 내의 모든 TextBox를 가져오는 메서드이다.)
TextBox 뿐만 아니라 다른 Control 요소 또한 필요한 경우 위에서 설명되었듯이 || 로 추가한다.
( Where(p => p is TextBox || p is RadioButton || p is CheckBox || p is ComboBox) )
1
2
3
4
5
6
7
|
// 모든 Control을 가져오기 위한 재귀함수 형태의 메서드
public IEnumerable<Control> Get_All_Controls(Control control)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => Get_All_Controls(ctrl)).Concat(controls).Where(p => p is TextBox);
}
|
cs |
위 메서드를 사용하여 모든 TextBox 컨트롤을 가져오려면 아래와 같이 사용하면 된다.
앞서 사용한 myForm에 존재하는 모든 Control를 찾아오려면 아래와 같이 작성한다.
입력 파라메터를 수정하여 가져오려는 Control을 받고, 재귀함수에 Where 내부 조건을 정의해서 사용한다면 보다 범용적으로 사용 가능한 메서드가 될 것이다.
1
|
List<Control> controlList = Get_All_Controls(myForm).ToList();
|
cs |
반응형
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] 프로그램에서 URL 열기, 브라우저 설정 (0) | 2023.12.18 |
---|---|
Task / Thread 차이점, Task 사용법 (0) | 2022.10.25 |
[C#] 문자열 자르기(Substring, Split) (2) | 2021.04.20 |
[C#] 물음표(?) 연산자 사용 방법 (0) | 2021.04.19 |
[C#] 이미지 투명화(배경제거) - #2 (0) | 2021.04.14 |
댓글