본문 바로가기
프로그래밍

[C#]for문에서 Form Controls 접근하여 속성변경(label)

by minimax95 2020. 11. 3.

이번 포스팅에서는 Form에서 label 등 Form Controls의 이름을 for문에서 접근하여 순차적인 label name의 속성을 변경하는 방법에 대해 정리해 보겠습니다.

 

먼저 Windows Forms App 프로젝트를 만들고 빈 Form에 아래 그림과 같이 label을 순차적으로 복사해 넣어두었습니다.

보통 label1, label2,...... 이렇게 순차적으로 이름이 자동부여되는데,

우리는 여기서 순차적으로 이름 붙은 다수의 label Controls를 for문을 통해 접근하여 글꼴을 임의로 변경해 보겠습니다.

글꼴을 변경하려면 label1을 선택하고 속성 창에서 Font 속성을 아래와 같이 변경할 수 있습니다.

임의의 글꼴을 추가하기 위해서 Windows에서 Font를 추가 설치하여 글꼴 대화 상자에서 선택하여 지정할 수 있지만

일부 글꼴에서는 "트루타입 글꼴만 지원됩니다."라는 경고가 뜨면서 적용이 안 되는 경우가 있습니다.

 

이런 경우에는 아래와 같이 소스코드에서 직접 폰트를 설정하면 적용이 가능합니다.

먼저 using System.Drawing.Text를 선언해 주고

아래와 같이 myFont를 정의합니다.

 

PrivateFontCollection myFont;

 

private void loadFont( )

{

    myFont = new PrivateFontCollection( );

    myFont.AddFontFile(". fonts/Lato-Regular.ttf");   // 폰트 파일은 솔루션에 Fonts 폴더를 생성하고 기존 파일에서 추가

}

 

여기까지 진행하면 myFont를 사용할 준비가 된 것입니다.

 

이제부터는 for문을 통해서 다수의 label에 접근하여 myFont를 한꺼번에 변경해 보도록 하겠습니다.

void InitLabel( )
{
    for(int i = 1; i < 11; i++)
    {
        this.Controls ["label" + i].Font = new Font(myFont.Families[0], 20.25F);
        this.Controls["label" + i]. Text = i + "label";
    }
}

 

myFont는 컬렉션 객체이므로 우리가 추가한 AddFontFile의 첫 번째 배열에 저장되어 있기 때문에 myFont.Families [0]으로 폰트 타입을 대입하였습니다.

또한 label들은 부모인 Form의 Controls 컬렉션에 정의되어 있기 때문에 위와 같이 this.Controls ["label" + i]로 접근하면 순차적인 label 컨트롤들에 접근하여 속성을 변경할 수 있습니다.

 

실행을 해보면 아래와 같이 폰트가 적용되어 출력되는 것을 볼 수 있습니다.

 

댓글