ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#]Winform 모든 컨트롤 정보 가져오기
    취미생활/C# 2019. 12. 18. 16:45
    반응형

    안녕하세요

     

    코딩하는남자 코딩연습생입니다

     

    이번에 할려고 하는것은 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에서는 재귀호출을 사용하여 컨테이너컨트롤 내부의 컨트롤 까지 검색하여

     

    리턴해주게 됩니다

     

    컨트롤 검색이나 명칭변경 또는 컨트롤 제어를 위해 고민중이시라면

     

    다음과 같은 구문을 사용하여 검색하게 되면 좋을거 같습니다

     

    감사합니다

    반응형
Designed by Tistory.