1. 프로그래밍과 C# 소개 ... 2 C#을 사용한 윈도우 응용 작성 ... 2 윈도우 그래픽 사용자 <B><FONT color ... #0000 프로그래밍 언어-절차적, 이벤트기반, 객체지향 ... 3 객체 모델(The Object Model) ... 4 마이크로소프트 비주얼 스튜디오 닷 넷 ... 5 C# 프로그램 작성 ... 6 3-단계 과정(The Three-Step Process) ... 6 C# 응용 파일 ... 7 비주얼 스튜디오 환경(The studio Environment) ... 7 IDE 시작 페이지(The IDE Start Page) ... 8 New Project 대화상자 ... 8 IDE 주 창 ... 9 툴바(The Toolbars) ... 9 문서 창(The Document Window) ... 9 폼 디자이너(The Form Designer) ... 10 솔루션 탐색기 창(The Solution Explorer Window) ... 10 속성 창(The Properties Window) ... 11 도구상자(The Toolbox) ... 11 도움말(Help) 특징 ... 11 디자인 시점(Design Time), 실행 시점(Run Time), 중단 시점(Break Time) ... 12 첫번째 C# 프로젝트 작성 ... 12 워크스페이스 설정 ... 13 프로젝트 설계하기 ... 16 사용자 <B><FONT color ... #0000 속성 설정 ... 21 코드 작성 ... 25 C# Code Statements ... 26 Hello World를 위한 이벤트-핸들링 메소드 코드 ... 28 프로젝트 수행(Run the Project) ... 31 작업 저장 ... 32 프로젝트 열기 ... 32 프로젝트 수정 ... 33 코드 인쇄하기 ... 38 에러 찾기와 고치기(Finding and Fixing Errors) ... 39 구문 에러 ... 39 실행-시간 에러 ... 41 로직 에러 ... 41 프로젝트 디버깅 ... 41 객체를 위한 명명 규칙과 관례 ... 42 비주얼 스튜디오 도움말 ... 43 MSDN의 설치와 실행 ... 43 도움말 주제 보기 ... 43 문맥-민감형(Context-Sensitive) 도움말 ... 45 창 관리 ... 45 2. 컨트롤 ... 53 컨트롤 ... 54 텍스트 박스(Text Boxes) ... 55 그룹 박스(Group Boxes) ... 55 체크 박스(check Boxes) ... 55 라디오 버튼(Radio Buttons) ... 56 픽처 박스(Picture Boxes) ... 56 Border과 Style 설정 ... 58 선 그리기 (Drawing a Line) ... 58 다중 컨트롤 다루기 ... 58 여러 개의 컨트롤 선택 ... 59 컨트롤 그룹의 선택 해제 ... 59 여러 개의 컨트롤을 그룹처럼 이동 ... 60 다중 컨트롤을 위한 속성 설정 ... 60 컨트롤 정렬 ... 60 사용자 편리를 위하여 응용프로그램 설계 ... 61 사용자 <B><FONT color ... #0000 키보드 제어키 정의 ... 62 확인(Accept) 버튼과 취소(Cancel) 버튼 설정 ... 62 컨트롤에 대한 탭 순서 설정 ... 63 화면에서 폼의 위치 설정 ... 64 툴팁 생성 ... 64 컨트롤에 대한 코딩 ... 66 텍스트 박스와 레이블 내용 지우기 ... 66 포커스 재설정 ... 66 라디오 버튼과 체크 박스의 Checked 속성 설정 ... 67 실행 시점에 가시성 설정 ... 67 텍스트 색 변경 ... 67 텍스트 연결(concatenating) ... 68 긴 프로그램 줄 연결하기 ... 68 이벤트 핸들러 기록 ... 68 프로그래밍 실습 예제 ... 69 좋은 프로그램 습관 ... 74 3. 변수, 상수, 계산 ... 83 데이터-변수(Variables)와 상수(Constants) ... 84 데이터 형 ... 85 명명, 규칙 ... 86 명명 관례 ... 86 상수-명명(Named)과 고유(Intricsic) ... 88 변수 선언 ... 90 변수의 범위와 유효기간 ... 91 계산하기 ... 94 문자열을 수치 데이터 형으로 변환하기 ... 94 산술 연산 ... 95 연산 순서 ... 95 코드에서 계산 사용하기 ... 97 수치 데이터 형 사이의 변환 ... 98 서로 다른 데이터 형을 가지고 계산 수행하기 ... 99 반올림 ... 99 디스플레이를 위한 데이터 형식 지정 ... 101 계산 프로그램 예 ... 104 프로젝트 설계(Planning the Project) ... 104 프로젝트 코딩 솔루션 ... 107 예외 처리 ... 108 try/catch 블록 ... 108 메세지 박스에 메시지 디스플레이 ... 110 TextMessage 문자열 ... 112 타이틀 바 텍스트 ... 112 MessageBox 버튼 ... 112 MessageBox 아이콘 ... 112 오버로드된 메소드 사용하기 ... 113 여러 필드의 검사 ... 114 카운팅과 합계 누적 ... 115 합계 숫자 ... 116 카운팅 ... 116 평균 계산 ... 116 프로그래밍 실습 예제 ... 116 4. 의사 결정과 조건 ... 131 if 문 ... 132 if의 순서도 ... 134 조건(Conditions) ... 135 숫자 변수와 상수 비교 ... 136 문자 데이터 비교 ... 136 문자열 비교 ... 138 대문자와 소문자 비교 ... 138 true 또는 false 검사 ... 139 조건 조합 ... 139 단축(Short-Circuit) 연산 ... 141 중복 if 문 ... 142 else if 문의 코딩 ... 144 라디오 버튼과 체크박스를 포함하고 있는 if 문의 사용 ... 146 간단한 예제 ... 147 라디오 버튼 그룹의 상태 조사 ... 148 체크 박스 그룹의 상태 조사 ... 148 향상된 메시지 박스 ... 149 메시지 문자열 표시 ... 149 여러 개의 버튼 표시 ... 150 입력 검증 ... 152 값의 범위 검사 ... 153 요청한 필드 검사 ... 153 다중 검증 수행 ... 154 Case 구조 ... 154 이벤트 핸들러 공유 ... 157 이벤트 핸들러 호출 ... 159 프로그래밍 실습 예제 ... 160 C# 프로젝트 디버깅 ... 168 출력 창 작성 ... 169 Break 버튼으로 실행 중단 ... 170 강제로 중단하기 ... 170 표현식의 현재 값 조사 ... 170 단계별로 코드 추적 ... 171 지역 창(Locals Window) ... 172 Autos Window ... 172 단계별 디버깅 튜토리얼 ... 173 5. 메뉴, 공통 대화상자, 메소드 ... 185 메뉴(Menus) ... 186 메뉴 정의 ... 186 메뉴 생성 - 단계별 ... 189 메뉴 항목을 위한 코딩 ... 190 메뉴 항목의 수정 ... 191 윈도우 메뉴의 표준 ... 192 공통 대화상자 ... 192 윈도우 공통 대화상자 디스플레이하기 ... 193 대화상자에서 정보 사용하기 ... 194 초기 값 설정 ... 195 문맥 메뉴의 생성 ... 196 문맥 메뉴 생성 - 단계별 ... 197 일반적 메소드 작성 ... 199 새로운 메소드 생성 ... 199 메소드에 매개변수 전달 ... 200 값을 반환하는 메소드 작성 ... 201 여러 개의 매개변수를 가지는 메소드 ... 203 계산을 작은 단위로 나누기 ... 204 프로그래밍 실습 예제 ... 206 6. 객체지향 프로그램 생성하기 ... 223 객체지향 프로그래밍 ... 224 객체(Objects) ... 224 객체지향 용어 ... 225 재사용 가능한 클래스 ... 227 다층(multitier) 응용 ... 227 클래스 ... 228 객체 인스턴스화 ... 228 사용자 클래스 설계 ... 229 사용자 클래스에서 속성 생성 ... 229 클래스 메소드 ... 231 생성자와 소멸자 ... 232 새로운 클래스 생성 - 단계별 ... 233 Class를 사용하여 새로운 객체를 생성 ... 237 새로운 객체 정의와 사용 - 단계별 ... 238 인스턴스 변수와 정적 변수 ... 240 단계별 튜토리얼에 정적 속성을 추가 ... 242 소멸자 ... 245 상속성 ... 245 속성과 메소드 상속 ... 245 메소드 재정의 ... 246 속성 액세스 ... 246 BookSale을 기반으로 파생 클래스 생성 ... 247 상속성 추가를 위한 단계별 튜토리얼 ... 248 상속을 위한 순수 기반 클래스 생성 ... 251 폼 클래스 상속 ... 251 다중 클래스 프로젝드 관리 ... 254 네임스페이스(Namespace) ... 254 기존의 클래스 파일을 프로젝트에 추가 ... 255 다른 폼에서 값 표시 ... 256 객체 브라우저 사용 ... 256 C# 클래스 검토 ... 257 사용자 클래스 검토 ... 257 프로그래밍 실습 예제 ... 259 7. 리스트, 루프, 인쇄 ... 277 리스트 박스와 콤보 박스 ... 278 항목 모음집 ... 279 리스트 채우기 ... 279 SelectedIndex 속성 ... 281 Items.Count 속성 ... 282 항목 모음집의 참조 ... 282 리스트로부터 항목의 제거 ... 283 리스트 지우기 ... 284 리스트 박스와 콤보 박스 이벤트 ... 284 While과 do/while 루프 ... 285 논리 데이터 형 다시 보기 ... 287 리스트 박스를 가지는 while 루프 ... 288 for 루프 ... 289 음의 증가 또는 역으로 카운팅 ... 290 진입 전에 만족되는 조건 ... 291 무한 루프 ... 291 루프 종료하기 ... 291 항목이 선택되어 보이도록 만들기 ... 292 텍스트 박스에 있는 항목 선택하기 ... 292 리스트 박스의 엔트리 선택하기 ... 292 프린터에 정보 보내기 ... 293 PrintDocument 컨트롤 ... 293 리스트 박스의 내용 인쇄 ... 296 완성된 PrintPage 메소드 ... 297 리스트에서 선택된 항목을 인쇄 ... 298 소수점 열 정렬 ... 298 인쇄 미리보기 디스플레이 ... 298 여러 페이지 인쇄 ... 300 프로그래밍 실습 예제 ... 301 8. 배열(Arrays) ... 317 일차원 배열 ... 318 첨자(subscripts) ... 318 타당한 첨자 ... 319 Foreach 문 ... 320 구조체(structures) ... 321 구조체를 기반으로하는 배열 선언 ... 322 구조체 변수에 있는 요소 액세스 ... 322 구조체 내에 배열 포함 ... 323 배열 요소를 누산기로 사용 ... 323 정확하게 합계 더하기 ... 324 배열 프로그램 디버깅 ... 325 테이블 탐색(lookup) ... 326 테이블 탐색 코딩 ... 328 배열과 리스트 박스를 함께 사용 ... 329 다차원 배열 ... 330 2차원 배열 초기화 ... 332 2차원 배열 출력 ... 332 2차원 테이블 합계 ... 333 2차원 테이블을 위한 탐색 동작 ... 334 실습 프로그래밍 예제 ... 336 9. 웹 폼 프로그래밍 ... 351 C#과 웹 프로그래밍 ... 352 클라이언트/서버 웹 응용 ... 352 웹 폼 생성 ... 353 비주얼 스튜디오 IDE에서의 웹 폼 ... 354 첫 번째 웹 폼 생성 - 단계적으로 ... 355 HTML 코드 보기 ... 356 브라우저 뷰 ... 356 툴바 ... 356 컨트롤 ... 357 이벤트 핸들링 ... 357 파일 ... 358 이벤트 핸들러 코딩 - 단계별 ... 358 디버깅 ... 360 다른 브라우저에서의 시험 ... 360 웹 폼의 레이아웃 ... 361 페이지 레이아웃 ... 361 레이아웃을 위해 테이블 사용하기 ... 361 검증자 컨트롤의 사용 ... 363 웹 프로젝트 관리 ... 365 파일의 위치 ... 365 프로젝트 옮기기 ... 365 웹 프로젝트 지우기 ... 366 몇 가지 웹 두문자어 ... 367 프로그램밍 실습 예제 ... 367 10. 데이터베이스 파일 액세스 ... 375 데이터베이스 파일 ... 376 C#과 데이터베이스 파일 ... 376 데이터베이스 용어 ... 376 XML 데이터 ... 377 ADO.NET과 C# 사용 ... 378 Connection 생성 ... 380 데이터 어댑터 설정 ... 382 데이터셋 정의하기 ... 386 컨트롤에 데이터 바인딩 ... 387 데이터베이스 응용 생성 ... 387 바운드 데이터그리드 컨트롤 생성 - 단계별 ... 387 데이터 미리보기 ... 392 데이터 바인딩 ... 392 데이터 바운드 라벨을 사용 ... 393 데이터셋을 이용한 네비게이션 ... 393 레코드 개수 검색 ... 394 레이블에 데이터 바인딩 - 단계별 ... 394 콤보박스에 데이터 넣기 ... 398 리스트 채우기 - 윈도우 폼 ... 399 여러 개의 데이터 어댑터 사용하기 ... 399 매개변수를 가진 쿼리 생성 ... 399 선택된 항목을 위하여 데이터 표시 ... 400 웹 폼 사용 ... 402 웹 응용을 위한 데이터베이스 보안 ... 403 이식성 있는 데이터베이스 프로젝트 작성 ... 403 프로그래밍 실습 예제 ... 405 11. 데이터와 객체를 파일에 저장하기 ... 413 데이터 파일 ... 414 데이터 파일과 프로젝트 파일 ... 414 데이터 파일 용어론 ... 414 데이트를 파일에 기록하기 ... 415 파일에서 데이터 읽기 ... 418 파일 공통 대화상자를 사용하기 ... 422 OpenFileDialog 컴포넌트 속성 ... 422 Open File 대화상자를 디스플레이하기 ... 422 파일 쓰기 프로그램 ... 424 리스트 박스의 내용을 저장하기 ... 426 리스트 박스를 적재하기 ... 427 파일의 존재를 검사하기 ... 427 파일을 저장하기 ... 428 사용자에게 저장하기를 질문하기 ... 428 Form_Closing 이벤트 핸들러 ... 429 프로그래밍 예제 ... 429 데이터 파일 ... 433 클래스를 시리얼라이즈할 수 있도록 만들기 ... 433 Formatter 객체를 추가하기 ... 433 FileStream을 사용하기 ... 434 객체 저장하기 ... 434 객체를 재생성하기 ... 435 프로그래밍 실습 예제 ... 436 12. 그래픽과 애니메이션 ... 447 윈도우와 웹에서의 그래픽 ... 448 그래픽스 환경 ... 448 그래픽 그리기를 위한 단계 ... 448 Paint 이벤트 핸들러 ... 449 Pen과 Brush 객체 ... 449 좌표계 ... 451 Graphics 메소드 ... 452 난수 ... 454 간단한 애니메이션 ... 457 애니메이션 그래픽을 디스플레이하기 ... 457 실행 시점에 픽처들을 제어하기 ... 457 픽처를 이동하기 ... 459 타이머 컴포넌트 ... 460 스크롤 바 컨트롤 ... 462 스크롤 바 속성 ... 463 스크롤 바 이벤트 ... 464 프로그래밍 예제 ... 464 프로그래밍 실습 예제 ... 466 13. C#의 기타 주제 ... 473 다중 문서 <B><FONT color ... #0000 MDI 프로젝트 생성하기 ... 475 Window 메뉴 추가하기 ... 475 툴바와 상태 바 ... 476 이미지 리스트 ... 477 툴바 ... 477 상태 바 ... 479 다른 컨트롤들 ... 481 달력 컨트롤 ... 481 크리스털 보고서 ... 484 보고서 디자이너 추가하기 ... 484 보고서 생성하기 - 단계별 ... 485 보고서 디자이너 ... 489 웹 폼에 보고서를 추가하기 ... 491 크리스털 보고서 프로젝트를 이동하기 ... 491 A. 피드백 질문의 답 ... 495 B. 날짜, 수학, 문자열 연산을 다루는 메소드 ... 507 날짜 다루기 ... 508 DateTime 구조체 ... 508 시스템 날짜와 시간 검색하기 ... 509 날짜 변수 ... 509 값을 날짜 형식으로 변환하기 ... 509 수학적 함수 ... 510 문자열 다루기 ... 511 C. 환경에 정통하기 위한 팁과 바로가기 ... 515 화면을 편리하게 설정하기 ... 516 나머지 창들을 닫거나 숨기기 ... 516 전체 화면 사용 ... 518 화면 레이아웃 수정 ... 518 작업을 위한 옵션 설정 ... 519 동적 도움말 해제 ... 519 폼 디자이너에서 바로가기를 사용하기 ... 520 같은 종류의 컨트롤을 여러 개 생성하기 ... 520 레이아웃 툴바 사용하기 ... 520 컨트롤을 조금씩 밀기 ... 520 컨트롤을 신속하게 복사하기 ... 521 편집기에서 바로가기를 사용하기 ... 521 텍스트 편집기 툴바 사용하기 ... 521 코드를 편집할 때 키보드 바로가기 사용하기 ... 522 편집기 창을 나누기 ... 523 드래그-앤드-드롭 편집을 사용하기 ... 523 태스크 리스트를 사용하기 ... 523 클래스 뷰 창을 사용하기 ... 523 객체 브라우저를 사용하기 ... 524 문맥-민감형(Context-Sensitive) 도움말 사용하기 ... 525 프로젝트를 복사하고 이동하기 ... 525 윈도우 프로젝트를 복사하고 이동하기 ... 525 웹 프로젝트를 복사하고 이동하기 ... 526 데이터베이스 프로젝트를 복사하고 이동하기 ... 526 D. C#과 비주얼 베이직의 비교 ... 529 용어집 ... 534 색인 ... 550