반응형
안녕하세요
코딩하는남자 코딩연습생입니다
이번에 할려고 하는것은 Winform에서 폼내의 모든 컨트롤의 이름을 가져올려고 합니다
보통 컨트롤 이름 가져오기 할께 사용하는 코드로는
Control GetControlByName(string Name)
{
foreach (Control c in this.Controls)
if (c.Name == Name)
return c;
return null;
}
이런식으로 구현을 하는데 이렇게 하게 되면
컨테이너컨트롤에 한해서 한 컨터이너컨트롤 내부의 컨트롤들만 불러오게 되더라구요
여기서 컨테이너컨트롤이라는건 Panle, groupbox, TableLayoutPanel, 등을 말하는것으로써
컨트롤을 감싸는 컨트롤을 칭하는것입니다
컨테이너 컨트롤을 포함한 모든 컨트롤을 불러오는 방법을 설명할 것입니다
클래스 파일을 생성합니다
[Source Code]
public static Control[] GetAllControlsUsingRecursive(Control containerControl)
{
List<Control> allControls = new List<Control>();
foreach (Control control in containerControl.Controls)
{
allControls.Add(control);
if (control.Controls.Count > 0)
{
allControls.AddRange(GetAllControlsUsingRecursive(control));
}
}
return allControls.ToArray();
}
이렇게 클래스 구문을 작성해주고
본문에서 다음과 같이 호출하여 리턴 받을 수 있습니다
[Source Code]
Control[] controls = MyApp.GetAllControlsUsingRecursive(this);
foreach (Control control in controls)
{
if (control.Name != "")
{
if (control.Name.Substring(0, 3) == "lbl" || control.Name.Substring(0, 3) == "cmd")
{
control.Text = appResourceMgr.GetString(control.Name);
}
}
}
저의 경우네는 레이블과 버튼의 정보만 가져오고 싶어서
레이블의 명칭의 시작을 lbl로 구성하고 버튼의 시작 명칭을 cmd로 구성하였기에
IF문을 통해 해달 컨트롤을 걸러냈습니다
이렇게 하면 본문의 호출할려는 폼의 모든 컨트롤을 GetAllControlsUsingRecursive로 리턴해주고
GetAllControlsUsingRecursive에서는 재귀호출을 사용하여 컨테이너컨트롤 내부의 컨트롤 까지 검색하여
리턴해주게 됩니다
컨트롤 검색이나 명칭변경 또는 컨트롤 제어를 위해 고민중이시라면
다음과 같은 구문을 사용하여 검색하게 되면 좋을거 같습니다
감사합니다
반응형
'코딩정보 > C#' 카테고리의 다른 글
[C#] OpenCvSharp 라이브러리 사용하기 #2 (4) | 2019.12.24 |
---|---|
[C#]리소스파일 항목 가져오기 (0) | 2019.12.18 |
[C#] 텔레그램 API를 이용한 메세지 보내기 (0) | 2019.12.16 |
[C#] 카카오 PC 대화창을 이용해 메세지 보내기 (0) | 2019.12.16 |
[C#] 네트워크 공유 폴더에 있는 파일 실행하기 (0) | 2019.12.13 |