[태그:] <span>C# 프로젝트</span>

안녕하세요. 언제나 휴일입니다.

이번 강의는 Wafer 예광탄을 작성하는 실습입니다.

[그림] 실행 화면

이번 실습에서는 Wafer를 클래스로 정의할거예요.

그리고 Wafer를 코팅하는 모습을 시각화하는 부분을 Panel로 표현하는 작업을 진행합니다.

1. 프로젝트 생성 및 컨트롤 배치

C#, Windows, 데스크톱 형태의 Windows Forms 앱(.NET Framework) 프로젝트를 생성하세요.

여기에서는 “Wafer 예광탄” 이름으로 프로젝트를 생성했어요.(솔루션 이름은 Wafer 코팅 시뮬레이션)

[그림] 컨트롤 배치

Button, Panel, Timer를 추가합니다.

그리고 Name 속성을 btn_start, pn_wafer, tm_coating으로 지정합니다.

pn_wafer의 BorderStyle은 FixedSingle로 설정합니다.

2. Wafer 클래스 정의

Wafer는 클래스로 정의합시다. 프로젝트에 Wafer 클래스를 추가하세요.

이후에 라이브러리 WaferLineLib에 정의할 것이어서 접근지정자를 public으로 설정합니다.

Wafer는 1부터 순자적으로 일련번호를 부여하기로 합시다.

이를 위해 정적 멤버로 가장 최근에 부여한 Wafer 번호를 기억하는 멤버를 캡슐화합니다.

그리고 웨이퍼의 일련 번호는 읽기 전용으로 캡슐화합니다.

하나의 Wafer에는 100개의 Cell이 있는 것으로 표현하기로 할게요.

그리고 현재 어느 Cell을 코팅하는지 기억하는 멤버도 캡슐화합니다.

생성자에서는 웨이퍼 일련 번호를 순차적으로 부여합니다.

현재 코팅하는 쉘 번호를 알 수 있게 속성(가져오기)를 제공합시다.

코팅할 쉘을 다음 쉘로 증가하는 메서드를 제공합시다. 더 이상 이동할 수 없다면 실패를 반환합니다.

특정 품질로 현재 쉘을 코팅하는 메서드를 제공합시다.

Wafer의 쉘의 품질을 확인할 수 있는 인덱서를 제공합시다.

Wafer의 평균 품질을 확인할 수 있게 속성(가져오기)을 제공합시다.

Wafer의 번호와 평균 품질을 문자열로 반환하게 ToString 메서드를 재정의하세요.

다음은 Wafer.cs 전체 소스 코드입니다.

3. Form1.cs 구현

Wafer 개체를 참조하는 속성을 캡슐화합시다.

btn_start의 Click 이벤트 핸들러를 추가합니다.(이벤트 핸들러는 코드만 따라 치면 안 되는 것은 아시죠. 모르신다면 Windows Forms에 관한 학습을 먼저 하시기 바랍니다.)

이벤트 핸들러에서는 타이머를 활성화하고 btn_start를 비활성화합니다.

tm_coating 타이머의 Tick 이벤트 핸들러를 추가합니다.

현재 코팅 중인 Wafer 개체가 없으면 먼저 생성합니다.

70~100 사이의 품질 수준으로 Wafer를 코팅하는 코드를 작성합니다.

만약 코팅할 쉘 이동이 실패하면 모든 쉘을 코팅 완료한 것이므로 타이머를 비활성화하고 btn_start를 활성화합니다.

pn_wafer의 Paint 이벤트 핸들러를 추가합니다.

이에 관한 부분은 동영상 강의를 참고하세요.

전체 코드는 다음과 같습니다.

4. 더블 버퍼링 가능한 패널 클래스 정의하기

현재까지 작성한 것으로 실행해서 버튼을 클릭하면 패널에 코팅하는 부분이 깜빡임이 심해 눈이 피곤합니다.

이러한 현상은 Windows 앱에서 Paint 이벤트는 우선 순위가 낮기 때문입니다.

이를 해결하기 위한 방법 중에 하나가 더블 버퍼링입니다.

DPanel 클래스를 추가하여 다음처럼 편집합니다.

5. Form1.Designer.cs 수정

그리고 Form1.Designer.cs에서 pn_wafer를 생성하는 코드를 DPanel 개체를 생성하는 것으로 수정합니다.

다음은 Form1.Designer.cs의 전체 소스 코드입니다.