m.cafe.daum.net/smbitpro/R7EG/6
Form 속성
이번에는 Form의 속성에서 레이아웃 관련 속성들에 대해 살펴보기로 하자.
레이아웃 속성
속성명 |
형식 |
설명 |
AutoScaleMode |
AutoScaleMode |
컨트롤의 자동 크기 조정 모드 ContainerControl에서 상속 |
AutoScroll |
bool |
자동 스크롤 기능 사용 여부 |
AutoScrollMargin |
Size |
자동 스크롤 여백 크기 ScrollableControl에서 상속 |
AutoScrollMinSize |
Size |
자동 스크롤 최소 크기 ScrollableControl에서 상속 |
AutoSize |
Bool |
폼의 크기가 자동 조정 여부 |
AutoSizeMode |
AutoSizeMode |
폼의 크기를 무엇에 따라 자동 조정할 지 여부 |
Location |
Point |
왼쪽 위 모퉁이의 위치 |
MaximumSize |
Size |
최대화 사이즈 |
MinimumSize |
Size |
최소화 사이즈 |
Padding |
Padding |
컨트롤의 안쪽 여백 Control에서 상속 |
Size |
Size |
폼의 크기 |
StartPosition |
StartPosition |
폼의 시작 위치 |
WindowState |
WindowState |
폼의 창 상태 |
1. AutoScaleMode
이 속성은 컨트롤의 자동 크기 조정 모드에 관한 속성이다. 폼은 사용자가 사용하는 화면 해상도나 폰트 크기에 따라 크기가 결정이 되어야 접근성이 높다고 할 수 있다.
이 속성은 ContainerControl에서 상속되었다.
다음은 AutoScaleMode에 대입할 수 있는 AutoScaleMode형식 내부의 열거형 멤버 이름이다.
열거형 멤버 이름 |
설명 |
None |
자동 크기 조정 사용 안 함 |
Font |
글꼴 크기를 기준으로 크기 제어 |
Dpi |
해상도를 기준으로 크기 제어 |
Inherit |
부모 크기 조정 모드에 따라 크기 제어 |
이에 대한 좀 더 살펴보기로 하자.
이를 위해 폼의 AutoScaleMode를 Font로 지정한 후 내부의 버튼을 누르면 폰트의 크기를 변경하는 응용을 만들면 확인이 가능할 것이다.
먼저 프로젝트를 하나 생성하고 폼 내부에 버튼을 추가하고 버튼에 Click이벤트 핸들러를 추가하자.
버튼의 Click이벤트 핸들러에서는 한 번 누를 때마다 10=>15=>20=>25=>10=>…과 같이 폰트 크기가 변경되기 위한 코드를 작성해 보자.
(순회하기 위해 check 멤버 필드를 Form1 클래스에 선언하자.)
int check; private void button1_Click(object sender, EventArgs e) { check = (check + 1) % 4; switch (check) { case 1: Font = new Font("궁서", 10); break; case 2: Font = new Font("궁서", 15); break; case 3: Font = new Font("궁서", 20); break; default: Font = new Font("궁서", 25); break; } } |
실행한 후 버튼을 클릭하면 폼의 크기가 변경됨을 확인할 수 있을 것이다.
2. AutoScroll
이 속성은 자동 스크롤 기능 사용 여부에 관한 속성이다. 이 속성이 true로 지정이 되면 폼 내부의 자식 컨트롤 중에 폼의 클라이언트 영역을 벗어나는 경우가 있으면 자동으로 스크롤 바가 생기게 된다.
이에 대해 좀 더 살펴보기로 하자.
이를 위해 폼 내부의 버튼을 누르면 Label컨트롤이 생성하도록 하고 생성된 Label컨트롤의 위치는 이전에 생성된 Label컨트롤보다 y값을 증가한 위치에 배치를 하면 폼의 클라이언트 영역을 벗어나게 될 것이다.
앞의 예처럼 먼저 프로젝트를 하나 생성하고 폼 내부에 버튼을 추가하고 버튼에 Click이벤트 핸들러를 추가하자.
버튼의 Click이벤트 핸들러에서는 한 번 누를 때마다 Label 개체를 생성하자. 그리고, 생성된 Label컨트롤의 위치는 이전 위치보다 y값을 30 증가한 곳에 배치하도록 하자.
(이를 위해 생성된 생성된 Label 개체수를 위한 lcnt멤버 필드를 Form1 클래스에 선언하자.)
int lcnt; private void button1_Click(object sender, EventArgs e) { Label label = new Label(); lcnt++; label.Text = lcnt.ToString(); label.Location = new Point(10, lcnt * 30); this.Controls.Add(label); } |
실행한 후 버튼을 계속 누르다 보면 다음과 같이 스크롤 바가 생기는 것을 알 수 있다.
3. AutoScrollMargin
이 속성은 자동 스크롤 여백 크기에 관한 것이다. 이 속성은 ScrollableControl에서 상속받았다.
위에서 작성한 예제 프로그램에 여백 크기를 변경한 후에 실행하여 비교해 보면 차이를 확인할 수 있을 것이다.
아래의 왼쪽은 여백을 (0,0)을 설정한 경우이고 오른쪽은 여백을 (0,50)을 설정한 후에 Label개체를 8개를 만들었을 때의 모습이다. 스크롤 바를 확인하면 차이를 느낄 수 있을 것이다.
|
|
4. AutoScrollMinSize
이 속성은 자동 스크롤 최소 크기이다. 이 속성은 ScrollableControl에서 상속받았다.
5. AutoSize
이 속성은 폼의 크기가 자동 조정 여부에 관한 것이다.
6. AutoSizeMode
이 속성은 폼의 크기를 무엇에 따라 자동 조정할 지 여부에 관한 것이다.
이 속성은 AutoSize 속성이 true일 경우에만 유효하다.
AutoSizeMode 속성에는 AutoSizeMode 열거형에 있는 두 가지 값 중에 하나를 선택할 수 있다.
다음은 AutoSizeMode 열거형에 나열된 멤버들이다.
열거형 멤버 이름 |
설명 |
GrowAndShrink |
내부 컨트롤에 따라 크기가 변경이 되며 수동으로 컨트롤의 크기를 조절할 수 없다. |
GrowOnly |
내부 컨트롤에 따라 크기가 확장되지만 컨트롤보다 작게축소되지는 않는다. 폼의 크기도 조절되지만 컨트롤보다 작게 축소되지 않는다. |
이에 대해 좀 더 살펴보기로 하자.
프로젝트는 위에서 만든 것을 그대로 사용하기로 하자. 폼의 AutoScroll 속성은 false로 변경하고 AutoSize는 true로 한다. 코드 수정없이 먼저 AutoSizeMode를 GrowAndShrink로 한 후에 실행해 보라. 그리고 버튼을 누르다 보면 폼의 사이즈가 커지는 것을 알 수가 있다. 또한, 폼의 사이즈를 수동으로 변경하려고 해도 안 된다는 것을 알 수가 있을 것이다.
다시 코드 수정없이 AutoSizeMode를 GrowOnly로 한 후에 같은 테스트를 해 보라. 버튼을 누르다 보면 폼의 사이즈가 커지는 것은 앞과 같음을 알 수 있다. 하지만, 폼의 사이즈를 변경이 가능하다는 것을 알 수 있을 것이다. 물론, 내부 컨트롤을 포함하는 사이즈 내에서 변경이 가능하다.
7. Location
이 속성은 왼쪽 위 모퉁이의 위치에 관한 속성이다.
8. MaximumSize
이 속성은 최대화 사이즈에 관한 속성이다.
9. MinimumSize
이 속성은 최소화 사이즈에 관한 속성이다.
10. Padding
이 속성은 컨트롤의 안쪽 여백에 관한 속성이다. 이 속성은 Control에서 상속되었다.
이에 대해 좀 더 살펴보기를 원한다면 폼에 버튼을 하나 배치를 한 후 버튼의 Dock속성을 Fill로하라. 그러면 버튼이 폼의 클라이언트 영역 전체에 배치됨을 알 수 있다. 그 후 Form1의 Pading 속성을 변경하면 버튼 컨트롤과 폼 사이에 안쪽 여백이 생기는 것을 알 수 있을 것이다.
다음은 Padding을 (10,20,50,100)을 주었을 때의 모습이다.
11. Size
이 속성은 폼의 크기에 관한 속성이다.
12. StartPosition
이 속성은 폼의 시작 위치에 관한 속성이다.
13. WindowState
이 속성은 폼의 창 상태에 관한 속성이다.
WindowState속성의 열거형의 멤버로는 Normal과 Minimized, Maximized가 있다.
'개발언어 > C#' 카테고리의 다른 글
[C#] (강의) 3. Form 이벤트 (키) (0) | 2021.04.12 |
---|---|
[C#] (강의) 2. Form 속성(모양/포커스/액세스 가능성) (0) | 2021.04.12 |
[C#] (강의) 2. Form 속성(창 스타일) (0) | 2021.04.12 |
[C#] (강의) 2. Form 속성(디자인,기타) (0) | 2021.04.12 |
[C#] (강의) 2. Form 속성 (동작관련) (0) | 2021.04.12 |