12 장 예제로 배우는 컨트롤

78
12 장 장장장 장장장 장장장 장장 장장장장 장장장 장장 장장장 장장장 장장 장장장 장장장 , 장장장장장장 , 장장 / 장장 장장장

Upload: jered

Post on 21-Mar-2016

122 views

Category:

Documents


9 download

DESCRIPTION

12 장 예제로 배우는 컨트롤. 공통 대화상자 컨트롤 리치 텍스트 박스와 메뉴 컨트롤 타이머 , 프로그레스바 , 날짜 / 시간 컨트롤. 대화상자 컨트롤. 공통 대화상자 다음은 닷넷 클래스에서 제공하는 공통 대화상자이다. 대화상자 컨트롤. 대화상자도 컨트롤이다 . C# 에서는 대화상자도 컨트롤로 제공 도구 상자에 가보면 공통 대화상자 컨트롤이 있다. 대화상자도 컨트롤. 대화상자도 컨트롤이다 . 대화상자를 사용하는 방법은 두 가지가 있다 . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 12 장 예제로 배우는 컨트롤

12 장 예제로 배우는 컨트롤

공통 대화상자 컨트롤리치 텍스트 박스와 메뉴 컨트롤타 이 머 , 프 로 그 레 스 바 , 날 짜 / 시 간 컨트롤

Page 2: 12 장 예제로 배우는 컨트롤

대화상자 컨트롤 공통 대화상자

다음은 닷넷 클래스에서 제공하는 공통 대화상자이다 .

공통 대화상자 설명

OpenFileDialog 파일을 열 때 파일을 선택하는 대화상자

SaveFileDialog 파일을 저장할 때 파일을 선택하는 대화상자 .

FontDialog 폰트 혹은 폰트 크기와 스타일을 지정할 때 사용하는 대화상자

ColorDialog 색상을 선택하는 대화상자

PrintDialog 프린트할 때 사용하는 대화상자

PrintPreview-Dialog 프린트 미리보기 대화상자

Page 3: 12 장 예제로 배우는 컨트롤

대화상자 컨트롤

대화상자도 컨트롤이다 . C# 에서는 대화상자도 컨트롤로

제공 도 구 상 자 에 가 보 면 공 통

대화상자 컨트롤이 있다 .

Page 4: 12 장 예제로 배우는 컨트롤

대화상자도 컨트롤 대화상자도 컨트롤이다 .

대화상자를 사용하는 방법은 두 가지가 있다 . 첫 번째는 도구 상자에서 대화상자 컨트롤을 추가하고 속성을 바꾸는 방법

    private void button1_Click(object sender, Sys-tem.EventArgs e)     {         if ( colorDialog1.ShowDialog() == DialogResult.OK )         {             // 색을 선택한 경우         }     }

Page 5: 12 장 예제로 배우는 컨트롤

대화상자도 컨트롤 대화상자도 컨트롤이다 .

대화상자를 사용하는 방법은 두 가지가 있다 . 두 번째는 버튼을 클릭했을 때 이벤트 핸들러에서 대화상자

컨트롤을 생성하고 사용하는 방법

     private void button1_Click(object sender, Sys-tem.EventArgs e)     {         // 컨트롤 생성         ColorDialog dlg = new ColorDialog();

        if ( dlg.ShowDialog() == DialogResult.OK )         {            // 색을 선택한 경우         }     }

Page 6: 12 장 예제로 배우는 컨트롤

파일 대화상자 대화상자도 컨트롤이다 .

파일 대화상자는 파일 열기 대화상자와 파일 저장 대화상자가 있다 .

다음은 OpenFileDialog 컨트롤의 속성을 정리해놓은 것이다 .

속성 설명

Filter 어떤 파일 확장자를 보여줄 것인지 지정하는 파일 필터 리스트 예 ) openDlg.Filter = " 모든 파일 (*.*)|*.*";

FilterIndex 필터 리스트에서 디폴트로 사용할 파일 필터를 지정 예 ) openDlg.FilterIndex = 2;

Ini-tialDirec-tory

파일 다이얼로그를 처음 띄웠을 때 , 보여줄 시작 디렉토리를 지정 예 ) openDlg.InitialDirectory = "c:\\";

Title 파일 다이얼로그의 타이틀에 보여줄 문자열을 지정예 ) openDlg.Title = " 파일 열기 ";

FileName 대화상자에서 선택한 파일 이름을 알려준다 .

Page 7: 12 장 예제로 배우는 컨트롤

파일 대화상자

파일 저장 대화상자는 파일 열기 대화상자에서 설명한 속성을 그대로적용할 수 있습니다 . 다만 저장하는 용도로 대화상자를 사용하기때문에 , 디폴트 확장자와 디폴트 파일 이름을 미리 지정해줍니다 .

SaveFileDialog 컨트롤

속 성 설 명

DefaultExt

FileName

디폴트 확장자를 지정합니다 .예 ) DefaultExt = "txt";디폴트 파일 이름을 지정합니다 . 사용자가 선택한 파일이름을 구할 때도 사용합니다 . 예 ) FileName = "Doc1";  

Page 8: 12 장 예제로 배우는 컨트롤

파일 대화상자

대화상자 컨트롤 속성은 속성 윈도우에서 바꾸어줍니다 . 대화상자를실행할 때는 다음과 같이 ShowDialog 메서드를 불러줍니다 .private void button1_Click(object sender, System.EventArgs e) {     if ( openFileDialog1.ShowDialog() == DialogResult.OK )     {         // 파일 열기 대화상자에서 선택한 파일 이름         MessageBox.Show( openFileDialog1.FileName );     } }private void button2_Click(object sender, System.EventArgs e) {     if ( saveFileDialog1.ShowDialog() == DialogResult.OK )     {             // 파일 저장 대화상자에서 선택한 파일 이름         MessageBox.Show( saveFileDialog1.FileName );     } }

Page 9: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

1. 공통 대화상자를 이용해서 텍스트박스 컨트롤 속성을 바꾸어보는 예제입니다 . 프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .

프로젝트 유형 : Windows 응용 프로그램

프로젝트 이름 : CommonDialog

Page 10: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .

객 체 객체 이름 속 성 지 정Text Box

ButtonButtonButton

Text Box1

Button1Button2Button3

Text = “안녕하세요 . 공통대화상자 예제입니다 .MultiLine = trueText = “폰트바꾸기”Text = “바탕색 바꾸기”Text = “전경색 바꾸기”

Page 11: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >3. 도구 상자에서 다음 공통 대화상자 컨트롤을 추가합니다 .

4. [ 폰트 바꾸기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 글꼴 대화상자를 띄워서 텍스트박스의 폰트 스타일을 지정합니다 .

private void button1_Click(object sender, System.EventArgs e) {     // 폰트 대화상자     if ( fontDialog1.ShowDialog() == DialogResult.OK )     {         // 선택한 폰트 지정         textBox1.Font = fontDialog1.Font;     } }

객 체 객체 이름 속 성 지 정Font DialogColor Dialog

fontDialogcolorDialog

Page 12: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >5. 프로그램을 실행하고 , [ 폰트 바꾸기 ]

버튼을 눌러보세요 . 폰트 대화상자에서 폰트 이름 , 스타일 , 폰트 크기를 바꿔보세요 .

폰트 대화상자에서 지정한 폰트 속성대로 텍스트박스의 폰트가 달라집니다 .

Page 13: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

< 잠깐만요 . - 폰트 대화상자 > FontDialog 대화상자에서 지정한 글꼴 스타일은 Font 객체에 저장됩니다 . 글꼴 정보를 가져올 때는 Font 객체를참조해서 가져옵니다 .

   Font font = fontDialog1.Font;

Page 14: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

혹시 Font 속성 각각에 대해서 자세히 알고자 한다면 , Font 객체의 멤버를 사용해서 알아낼 수 있습니다 .

    fontDialog1.Font.Name         // Font Facename     fontDialog1.Font.Bold         // true 또는 false     fontDialog1.Font.Italic       // true 또는 false     fontDialog1.Font.Strikeout    // true 또는 false     fontDialog1.Font.Size         // float     fontDialog1.Font.SizeInPoint  // float

</ 잠깐만요 . - 폰트 대화상자 >

Page 15: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

6. [ 바탕색 바꾸기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 색상 대화상자를 띄워서 텍스트박스의 바탕색을 지정합니다 .

private void button2_Click(object sender, System.EventArgs e) {     // 색 대화상자     if ( colorDialog1.ShowDialog() == DialogResult.OK )     {         // 바탕색 바꾸기 (BackColor 속성 )         textBox1.BackColor = colorDialog1.Color;     } }

Page 16: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

7. [ 전경색 바꾸기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 색상 대화상자를 띄워서 텍스트박스의 글자색을 지정합니다 .

private void button3_Click(object sender, System.Even-tArgs e)

{     if ( colorDialog1.ShowDialog() == DialogResult.OK )     {         // 전경색 바꾸기 (ForeColor 속성 )         textBox1.ForeColor = colorDialog1.Color;     } }

Page 17: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

< 잠깐만요 . - 색상 대화상자 >

ColorDialog 대화상자는 Color 객체를 멤버로 가지고 있습니다 . 사용자가 지정한 값은 Color 멤버를 참조해서 가져옵니다 .

       Color color = colorDialog1.Color;

</ 잠깐만요 . - 색상 대화상자 >

Page 18: 12 장 예제로 배우는 컨트롤

< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >

8. [ 바탕색 바꾸기 ] 버튼을 눌러보세요 . 색상 대화상자에서 색을 바꿔보세요 . 마찬가지로 [ 전경색 바꾸기 ] 버튼을 눌러서 색을 바꿉니다 . 색상 대화상자에서 지정한 색으로 텍스트박스의 글자색과 바탕색이 바뀝니다 .

Page 19: 12 장 예제로 배우는 컨트롤

메시지 박스

메시지 박스메시지 박스 객체는 오류 , 경고 , 알림을 나타내는 아이콘과 함께 사용자에게 메시지를 보여주는 대화상자입니다 . 다음은 MessageBox 객체의Show 메서드입니다 . 인자에 따라 메시지 박스에 보여지는 버튼과 아이콘이 달라집니다 .

 DialogResult  MessageBox.Show(           string text,               // 메시지           string caption,            // 윈도우 타이틀           MessageBoxButtons buttons, // 버튼 구성

          MessageBoxIcon icon );     // 아이콘

Page 20: 12 장 예제로 배우는 컨트롤

메시지 박스

◈ 버튼 구성 – MessageBoxButtons

맴 버 설 명

AbortRetryIg-noreOKOKCancelRetryCancelYesNoYesNoCancel

[ 멈춤 ],[ 다시 시도 ],[ 무시 ] 버튼 [ 확인 ] 버튼 , 디폴트 지정 [ 확인 ], [ 취소 ] 버튼 [ 다시 시도 ], [ 취소 ] 버튼 [ 예 ], [ 아니오 ] 버튼 [ 예 ], [ 아니오 ], [ 취소 ] 버튼

Page 21: 12 장 예제로 배우는 컨트롤

메시지 박스

◈ 아이콘 선택 – MessageBoxIconAsterisk, Error, Exclamation, Hand, Information, None, Question,Stop, Warning

다음과 같이 버튼이나 아이콘 인자 없이 Show 메서드를 부르면 ,[ 확인 ] 버튼만 보여줍니다 .

MessageBox.Show( “메시지” , “타이틀” );

Page 22: 12 장 예제로 배우는 컨트롤

메시지 박스

메시지박스 사용 예다음은 메시지박스 객체를 사용한 예입니다 . 메시지 박스는 i 아이콘과예 / 아니오 버튼을 보여줍니다 .

private void button1_Click(object sender, System.EventArgs e) {     DialogResult res = MessageBox.Show(                 " 다음 단계로 넘어가시겠습니까 ?",                 " 메시지 박스 ",                 MessageBoxButtons.YesNo,                 MessageBoxIcon.Asterisk );

    if ( res == DialogResult.Yes )     {       MessageBox.Show( " 다음 단계로 넘어갑니다 .", " 선택 결과 " );     } }

Page 23: 12 장 예제로 배우는 컨트롤

메시지 박스

사용자가 [ 예 ] 버튼을 누른 경우 , Show 메서드가 리턴한 결과는DialogResult.Yes 값입니다 .리턴한 결과 값을 비교해서 사용자가 선택한버튼을 알아낼 수 있습니다 .

< 아세요 ? - DialogResult >

윈도우를 대화상자로 실행하려면 ShowDialog 메서드를 부릅니다 . 이 메서드는 Dialo-gResult값을 리턴하는데 , 이 값은 사용자가 선택한 상태를 알려줍니다 . 보통 이 리턴 값은 대화상자위에 있는 명령 버튼 중에서 어떤 것을 선택했는지에 따라 달라집니다 .

    if ( dlg.ShowDialog() == DialogResult.OK )     {         // OK 버튼을 누른 경우     }

</ 아세요 ? - DialogResult >

Page 24: 12 장 예제로 배우는 컨트롤

리치텍스트박스와 메뉴

리치텍스트박스리치텍스트박스 컨트롤은 워드프로세서 수준의 편집 기능을 가진 컨트롤입니다 . 텍스트박스 컨트롤의 단점은 처리할 수 있는 텍스트 양에제한이 있고 , 하나의 폰트만 사용할 수 있다는 점입니다 . 리치텍스트박스 컨트롤은 이런 문제점을 해결하고 문단 개념을 추가한 텍스트 편집 컨트롤입니다 .

Page 25: 12 장 예제로 배우는 컨트롤

리치텍스트박스와 메뉴

메인 메뉴메뉴도 하나의 컨트롤입니다 . 다른 컨트롤과 마찬가지로 도구 상자에서 메인 메뉴 컨트롤을 추가하고 속성을 바꿔줍니다 . 메뉴를 구성하려면 먼저 MainMenu 객체를 추가합니다 . 그리고 폼 디자인 윈도우 상단에 보이는 메뉴 속성을 수정하면 됩니다 .

Page 26: 12 장 예제로 배우는 컨트롤

리치텍스트박스와 메뉴

MainMenu 객체는 여러 MenuItem 객체를 모아둔 콜렉션 형태로 구성되며 , 각각 메뉴 객체는 하나의 메뉴 항목을 나타냅니다 . 각 객체마다 속성을 지정해서 메뉴를 정의합니다 . 예를 들면 , 메뉴를 안 보이게 한다거나 체크 표시를 하거나 , Disable 상태로 만들 수 있습니다 .

Page 27: 12 장 예제로 배우는 컨트롤

리치텍스트박스와 메뉴

메인 메뉴 구성은 다음 장에서 메모장 예제를 만들어보면서 설명하도록 하겠습니다 .

< 아세요 ? - 메뉴 속성 바꾸기 >

MenuItem 객체의 Checked 속성에 true 값을 주면 , 메뉴가 보여질 때 앞부분에 체크 표시가 붙어 있죠 . 메뉴를 Disable 시키려면 Enable 값에 false값을 줍니다 .

     miOpen.Checked = true; // 메뉴에 체크 표시      miOpen.Enable = false; // 메뉴 Disable

< 아세요 ? - 메뉴 속성 바꾸기 >

Page 28: 12 장 예제로 배우는 컨트롤

리치텍스트박스와 메뉴

컨텍스트 메뉴 구성컨텍스트 메뉴는 컨트롤에서 오른쪽 버튼을 클릭했을 때 나타나는 메뉴입니다 .도구 상자에서 ContextMenu 객체를 추가할 수 있습니다 .

Page 29: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메

뉴 >

1. 리치텍스트박스 컨트롤을 추가하고 , ContextMenu 객체를 통해서 기본편집 기능과 폰트 / 색상 속성을 바꾸어보는 예제입니다 . 프로젝트 이름과작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .

프로젝트 유형

프로젝트 이름

Windows 응용 프로그램

SimpleWordPad

Page 30: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .

Page 31: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

3. 리치텍스트박스에서 오른쪽 버튼을 클릭했을 때 보여줄 컨텍스트메뉴입니다 . 메뉴에는 간단한 편집 기능을 추가합니다 . 트레이에있는 컨텍스트 메뉴를 선택하고 , 다음과 같이 메뉴를 구성합니다 .

객체이름 Text 속성miCutmiCopymiPastemiSelectAllmiSeparatormiFontmiFontColormiSeparatormiSavemiLoad 

잘라내기 복사 붙여넣기 모두 선택 - 폰트 지정 폰트 색 지정 - 저장하기 읽어오기

Page 32: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

메뉴 구성 화면은 메뉴 객체를 선택했을 때만 나타났다가 사라집니다 .실제로 프로그램을 실행했을 때는 보이지 않습니다 .

Page 33: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

4. 디자인 윈도우에서 리치텍스트박스 컨트롤을 선택해보세요 . 속성 윈도우를 보면 , 다음과 같이 컨텍스트 메뉴를 지정할 수 있습니다 . ContextMenu 속성을 클릭하면 , 현재 폼에 정의된 컨텍스트 메뉴리스트를 보여줍니다 .

Page 34: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >5. 편집 메뉴 항목을 더블클릭해서 메뉴 핸들러를 추가합니다 . 추가한 메뉴 핸들러는 다음과 같이 구현해줍니다 .

private void miCopy_Click(object sender, System.EventArgs e) {     richTextBox1.Copy(); // 복사 } private void miCut_Click(object sender, System.EventArgs e) {     richTextBox1.Cut(); // 잘라내기 } private void miPaste_Click(object sender, System.EventArgs e) {     richTextBox1.Paste();  // 붙여넣기 } private void miSelectAll_Click(object sender, System.EventArgs e) {     richTextBox1.SelectAll();  // 모두 선택 }

Page 35: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

6. [ 폰트 지정 ] 과 [ 폰트 색 지정 ] 메뉴 핸들러를 추가하고 , 다음과 같이 구현합니다 .

private void miFont_Click(object sender, System.EventArgs e) {     if ( fontDialog1.ShowDialog() == DialogResult.OK )     {         // 폰트 스타일 지정         richTextBox1.SelectionFont = fontDialog1.Font;     } } private void miFontColor_Click(object sender, System.EventArgs e) {     if ( colorDialog1.ShowDialog() == DialogResult.OK )     {         // 폰트 색 지정         richTextBox1.SelectionColor = colorDialog1.Color;     } }

Page 36: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

< 아세요 ? - SelectionXXX 속성 >

텍스트박스와 달리 리치텍스트박스는 문단 (paragraph) 단위 개념이 있으며 ,스타일을 다양하게 지정할 수 있습니다 . 다음은 리치텍스트박스에서 특정텍스트 영역을 선택하고 스타일을 지정할 때 사용하는 속성입니다 .

</ 아세요 ? - SelectionXXX 속성 >

속 성 설 명

SelectionFont SelectionColorSelectionAlignmentSelectionBulllet

선택된 영역에 폰트 속성을 지정합니다 . 선택된 영역에 색상 속성을 지정합니다 .선택된 영역에 정렬을 지정합니다 .선택된 영역에 블렛을 지정합니다 .

Page 37: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

7. [ 저장하기 ] 와 [읽어오기 ] 메뉴 핸들러를 추가하고 , 다음과 같이구현합니다 .

private void miSave_Click(object sender, System.EventArgs e) {        richTextBox1.SaveFile( "one.rtf" ); }

private void miLoad_Click(object sender, System.EventArgs e) {     richTextBox1.LoadFile( "one.rtf" ); }

Page 38: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

< 설명 - SaveFile/LoadFile 메서드 >

리치텍스트박스 컨트롤은 RTF 포맷을 사용해서 파일을 저장하고 읽어옵니다 . 파일을 저장할 때는 SaveFile 메서드를 부르고 , 읽어올 때는LoadFile 메서드를 부릅니다 . 메서드에는 파일 이름을 포함한 경로를넘겨줍니다 .

</ 설명 - SaveFile/LoadFile>

Page 39: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

8. 프로그램을 실행해보세요 . 리치텍스트박스 컨트롤에서 오른쪽 버튼을 누르면 다음과 같이 컨텍스트 메뉴가 뜹니다 .

Page 40: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

9. 메뉴에서 제공하는 편집 기능을 사용해보고 , 폰트 속성도 바꾸어보세요 . 전체가 하나의 폰트 속성을 갖는 것이 아니라 문서의 일부분을 선택해서 폰트 속성을 지정할 수 있습니다 .

Page 41: 12 장 예제로 배우는 컨트롤

< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >

10. 편집한 문서를 저장했다가 다시 읽어보세요 . 편의상 RTF 파일 이름을 코드에 지정해두었습니다 .

Page 42: 12 장 예제로 배우는 컨트롤

타이머와 프로그레스바

타이머타이머 컨트롤은 정해진 시간 간격마다 어떤 코드를 실행할 때 사용합니다 .타이머가 시작되면 일정 시간 간격으로 지정한 메서드를 불러줍니다 .

속 성 설 명Enabled

Interval

StartStop

타이머 시작 / 멈춤을 지정합니다 . 예 ) timer1.Enabled = true; 서드를 불러주는 시간 간격을 지정합니다 . millisec 단위입니다 . (초기값 :100) 예 ) timer1.Interval = 500;타이머를 시작합니다 . 예 ) timer1.Start(); 타이머를 멈춥니다 . 예 ) timer1.Stop();

Page 43: 12 장 예제로 배우는 컨트롤

타이머와 프로그레스바

Enable 속성에 true 값을 넣으면 Start 메서드가 불려져 타이머가 시작됩니다 . 반대로 false 값을 넣으면 Stop 메서드가 불려져 타이머가 멈춥니다 . Enable 값을 검사해서 타이머가 시작 여부를 알 수도 있습니다 .

    if ( Enabled )     {         // 타이머가 시작된 경우     }

Timer 컨트롤의 Tick 이벤트는 타이머를 시작했을 때 주기적으로 발생하는 이벤트입니다 . 이벤트가 발생할 때마다 불려질 이벤트 핸들러를 구현합니다 .

    private void timer1_Tick(object sender, System.EventArgs e)     {         // 일정 시간 간격으로 실행될 코드     }

Page 44: 12 장 예제로 배우는 컨트롤

타이머와 프로그레스바

프로그레스바 컨트롤은 시간이 오래 걸리는 어떤 작업을 할 때 , 사용자에게 현재 진행 정도를 알려줄 때 사용합니다 . 윈도우에서 파일을 복사하거나 웹에서 파일을 다운로드 받을 때 많이 볼 수 있는 컨트롤로 , 사용자에게 지루함을 덜어주면서 계속 실행되고 있음을 알려줍니다 .

Page 45: 12 장 예제로 배우는 컨트롤

타이머와 프로그레스바

예를 들면 네트워크를 통해서 파일을 다운로드 받는다거나 VS.NET 과 같은 큰 프로그램을 설치할 때 , 현재 진행 상황과 함께 앞으로 남은 시간을 계산해서 보여줍니다 .이렇게 오랜 시간이 걸리는 작업을 할 때 사용자에게 얼마나 진행되었으며 남은 시간이얼마나 되는지 알려줄 수 있습니다 .※다음은 ProgressBar 컨트롤의 주요 속성입니다 .

속 성 설 명Minimum

Maxmum

Step

Value

프로그레스 컨트롤에서 처음 시작 값입니다 .예 ) progressBar1.Minimum=0;프로그레스 컨트롤에서 맨 마지막 값입니다 .예 ) progressBar1.Maxmum=100;값의 증가치를 가지고 있습니다 .예 )progressBar1.Step=10;현재 값을 알려줍니다 .예 ) lable1.Text = value.ToString()+”%”;

Page 46: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

1. 타이머를 이용해서 프로그레스바를 조금씩 증가시키는 예제입니다 .2. 여러 개의 파일을 다운로드받는다고 가정하고 , 전체 파일에 대한 다운로드 퍼센트와 각 파일에 대한 다운로드 퍼센트를 보여줍니다 .프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .

프로젝트 유형프로젝트 이름

Windows 응용 프로그램 TimerProgress

Page 47: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .

Page 48: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

객 체 객체 이름 속성 지정Buton

LableLable

ProgressBarProgressBar

Timer

Button

Lable1Lable2

ProgressBar1ProgressBar2

timer1

Text = “다운로드”

Text = “전체 파일 : 0%;Text = “파일 : 0%”

Minimum = 0 ,Maximum = 100Minimum = 0, Maximum = 100

Interval = 100

Page 49: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

3. [ 다운로드 시작 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 타이머가 실행된 상태와 아닌 상태를 구분해서 구현해줍니다 . private void button1_Click(object sender, System.EventArgs e) {     if ( timer1.Enabled ) // 타이머가 ON 되어 있으면 ,     {         // 타이머 멈춤         timer1.Stop();

        // 사용자가 타이머를 시작할 수 있도록 “시작”으로 바꿈         button1.Text = " 다운로드 시작 ";     }     else // 타이머가 OFF 상태이면     {         // 타이머 시작         timer1.Start();

        // 사용자가 타이머를 멈출 수 있도록 “멈춤”으로 바꿈         button1.Text = " 다운로드 멈춤 ";     } }

Page 50: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

4. Timer1 컨트롤을 더블클릭하면 Tick 이벤트 핸들러가 추가됩니다 . 추가된 이벤트 핸들러에 다음과 같이 구현합니다 .

private void timer1_Tick(object sender, System.EventArgs e) {     // 각 파일 진행 퍼센트     if ( progressBar2.Value < progressBar1.Maximum )         progressBar2.Value += 10;     else     {         //  전체 파일에 대한 진행 퍼센트         if ( progressBar1.Value < progressBar1.Maximum )         {             progressBar1.Value += 10;             progressBar2.Value = 0;         }         else        

Page 51: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

 {             // 전체 파일 다운로드 끝남 , 초기화             timer1.Stop();             button1.Text = " 다운로드 시작 ";

            progressBar1.Value = 0;             progressBar2.Value = 0;         }

        label1.Text = “전체 파일 : ” + progressBar1.Value.ToString() + "%";     }

    label2.Text = “파일 : ” + progressBar2.Value.ToString() + "%"; }

Page 52: 12 장 예제로 배우는 컨트롤

< 따라하기 - 파일 다운로드 상태 보여주기 >

4. 예제는 타이머를 이용해서 마치 파일을 다운로드받는 것처럼 흉내낸 프로그램입니다 . 프로그램을 실행하고 [ 다운로드 시작 ] 버튼을 눌러보세요 . 파일 프로그레스바가 끝날 때마다 전체 파일 프로그레스바도 조금씩 증가합니다 . 둘 다 100% 까지 진행하면 멈춥니다 .

Page 53: 12 장 예제로 배우는 컨트롤

기타 컨트롤

트랙바 (TrackBar) 트랙바 컨트롤은 불연속된 값이나 어떤 범위의 값을 입력받을 때 사용합니다 . 정해진 범위 내에서 값을 증가 또는 감소시켜 조절할 수 있습니다 . 스크롤바와 유사한 모양을 가지고 있으며 , 기능적으로 도 비슷합니다 . 윈도우에 있는 볼륨 조절 대화상자를 보면 다양한 모습으로 트랙바를 사용 한 예를 볼 수있습니다 .

Page 54: 12 장 예제로 배우는 컨트롤

기타 컨트롤

속 성 설 명MinimumMaximumTickFrequencyValue

트랙바에서 지정할 수 있는 최소값트백바에서 지정할 수 있는 최대값눈금 간에 간격현재 값

Page 55: 12 장 예제로 배우는 컨트롤

픽처박스 (PictureBox)

픽처박스 컨트롤은 이미지를 읽어서 보여줄 때 사용합니다 .이 컨트롤의 주된 용도는 사용자에게 이미지를 보여주는 것입니다 .

Page 56: 12 장 예제로 배우는 컨트롤

픽처박스 (PictureBox)

속 성 설 명SizeMode

Image

이미지를 어떤 식으로 보여줄 것인지 지정합니다 .예 )pictureBox1.SizeMode = pictureBoxSizeMode.StretchIm-age;보여줄 이미지를 지정합니다 .

Page 57: 12 장 예제로 배우는 컨트롤

픽처박스 (PictureBox)

< 아세요 ? – PictureBoxSizeMode 속성 >PictureBoxSizeMode 는 다음과 같은 값을 가지고 있습니다 .픽처박스 객체의 SizeMode 속성에 지정하는 값입니다 .

pictureBox1.SizeMode = PictureBoxSizeMode.Normal

</ 아세요 ? – PictureBoxSizeMode 속성 >

속 성 설 명NomalStretchIm-ageAutoSizeCenterIm-age

컨트롤 크기와 상관없이 원래 이미지 크기 그대로 보여줍니다 .컨트롤 크기에 맞춰 이미지를 늘리거나 줄여서 조여줍니다 .원래 이미지 크기에 맞춰 컨트롤 크기를 자동으로 조절해줍니다 .컨트롤 안에서 이미지가 가운데 위치하도록 보여줍니다 .

Page 58: 12 장 예제로 배우는 컨트롤

이미지리스트 컨트롤

프로그램을 작성할 때 , 여러 개의 이미지를다루는 경우가 자주 필요합니다 .예를 들어 리스트 컨트롤이나 툴바 컨트롤은여러 이미지를 필요로 하는데 ,이미지리스트 (ImageList) 컨트롤을 사용해서지정합니다 .

도구 상자에서 이미지 리스트 컨트롤을 추가하고 어떤 속성이 있는지 속성 윈 도우를 보세요 . Images 속성은 여러 이미지를 담고 있는 이미지 콜렉션입니다 .

Page 59: 12 장 예제로 배우는 컨트롤

이미지리스트 컨트롤

속성 윈도우에서 Images 항목 옆에 있는 조그만 버튼을 누르면 , 이미지콜렉션을 편집할 수 있는 대화상자가 뜹니다 . [ 추가 ] 버튼을 눌러서 이미지를 추가합니다 .

Page 60: 12 장 예제로 배우는 컨트롤

이미지리스트 컨트롤

다음은 픽처박스에 이미지를 보이는 예입니다 . 콜렉션에 들어 있는 이미지는 인덱스 값을 지정해서 사용할 수 있습니다 .

    pictureBox1.Image = imageList1.Images[0]; // 첫 번째 이미지     pictureBox1.Image = imageList1.Images[1]; // 두 번째 이미지

다음은 픽처박스에 이미지를 보이는 예입니다 . 콜렉션에 들어 있는 이미지는 인덱스 값을 지정해서 사용할 수 있습니다 .

    pictureBox1.Image = imageList1.Images[0]; // 첫 번째 이미지     pictureBox1.Image = imageList1.Images[1]; // 두 번째 이미지

Page 61: 12 장 예제로 배우는 컨트롤

이미지리스트 컨트롤다음은 폼 윈도우에 이미지를 그린 실행 화면입니다 .

</ 요거 아세요 ? - Draw 메서드 >

Page 62: 12 장 예제로 배우는 컨트롤

툴바와 상태바

툴바는 같은 크기의 여러 버튼을 묶어서 관리해주는 컨트롤입니다 . 상태바 컨트롤은 보통 윈도우 아래 부분에 위치하면서 , 사용자에게 현재 작업중인 정보를 알려줍니다 .

Page 63: 12 장 예제로 배우는 컨트롤

툴바와 상태바

툴바와 상태바 예제는 다음 장에서 설명하도록 하겠습니다 .

< 잠깐만 - 툴바의 이미지리스트 >

툴바는 앞에서 설명한 이미지리스트 컨트롤을 이용해서 툴바 버튼을만들어냅니다 . 툴바뿐만 아니라 리스트 컨트롤에서도 이미지 리스트를 사용합니다 .

</ 잠깐만 - 툴바의 이미지리스트 >

Page 64: 12 장 예제로 배우는 컨트롤

새로운 컨트롤

DateTimePicker 컨트롤은 사용자에게 날짜와 시간을 선택하도록 할 때 사용 하는 컨트롤입니다 . 콤보박스처럼 버튼을 누르면 아래로 펼쳐집니다 . 날짜를 선택할수 있는 달력 컨트롤이 보이죠 .

Page 65: 12 장 예제로 배우는 컨트롤

새로운 컨트롤DateTimePicker 컨트롤

속 성 설 명MaxDateMinDateValueFormat

선택할 수 있는 최대 날짜 (초기값 : 12/31/9998)선택할 수 있는 최소 날짜 (초기값 : 1/1/1753)선택한 날짜 / 시간 (DateTime 객체 )보여줄 날짜 / 시간 포맷을 지정합니다 .(Long, Short, Time)예 ) dateTimePicker1.Format = DateTimePickerFor-mat.Short;

Page 66: 12 장 예제로 배우는 컨트롤

새로운 컨트롤

MonthCalendar 컨트롤은 날짜 범위를 입력받을 수 있습니다 . 컨트롤에서 날짜를 선택하고 마우스를 드래그하면 여러 날짜를 선택할 수있습니다 .다음은 선택한 날짜 범위 정보를 구한 예입니다 .

Page 67: 12 장 예제로 배우는 컨트롤

새로운 컨트롤MonthCalendar 컨트롤

속 성 설 명MaxDateMinDateSelectionStartSelectionEndSelection-Range

선택할 수 있는 최대 날짜 (초기값 : 12/31/9998)선택할 수 있는 최소 날짜 (초기값 : 1/1/1753)선택한 날짜에서 시작 날짜 (DateTime 객체 )선택한 날짜에서 끝나는 날짜 (DateTime 객체 )선택한 날짜 영역

Page 68: 12 장 예제로 배우는 컨트롤

새로운 컨트롤

다음은 DateTimePicker 컨트롤과 MonthCalendar 컨트롤에서 선택한날짜를 가져오는 예입니다 . 선택한 날짜는 DateTime 객체로 리턴합니다 . 제공되는 예제 소스에서 Calendar 프로젝트를 참조하세요 .

private void button1_Click(object sender, System.EventArgs e) {     MessageBox.Show( dateTimePicker1.Value.ToString()," 선택 날짜 " ); }

private void button2_Click(object sender, System.EventArgs e) {     string str = monthCalendar1.SelectionStart.ToString();     str += "~";     str += monthCalendar1.SelectionEnd.ToString();     MessageBox.Show( str, " 선택 날짜 " ); }

Page 69: 12 장 예제로 배우는 컨트롤

NotifyIcon 컨트롤

윈도우 화면에서 오른편 아래에 보면 시스템 트레이가 보이죠 ?NotifyIcon 컨트롤은 시스템 트레이에 아이콘을 두는 프로그램을 작성할 때 사용합니다 . 보통 오른쪽 버튼으로 아이콘을 클릭하면 컨텍스트 메뉴가 나타나도록 구현합니다 .

Page 70: 12 장 예제로 배우는 컨트롤

NotifyIcon 컨트롤

NotifyIcon 컨트롤의 Click 이벤트는 시스템 트레이에 있는 아이콘을클릭했을 때 발생하는 이벤트입니다 . 일반적으로 Click 이벤트가 발생하면 주 작업 윈도우를 띄워줍니다 .

  private void notifyIcon1_Click(object sender, System.EventArgs e)     {         // 트레이에 있는 아이콘을 클릭했을 때     }

Page 71: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

1. 시스템 트레이에 아이콘을 추가하고 실행해보는 예제입니다 .프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .프로젝트 유형 : Windows 응용 프로그램 프로젝트 이름 : NotifyIcon

2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .

Page 72: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

3. 컨텍스트 메뉴를 추가하고 다음과 같이 구성합니다 . 시스템 트레이에 있는 아이콘을 클릭했을 때 보여줄 컨텍스트 메뉴입니다 .

4. NotifyIcon 컨트롤의 컨텍스트 메뉴를 추가합니다 . 속성 윈도우에서 Con-textMenu 속성을 선택하고 컨텍스트 메뉴를 선택합니다 .

Page 73: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

5. 생성자에서 NotifyIcon 컨트롤의 속성을 바꿔줍니다 . 아이콘을 초기화하고 , 처음에 실행했을 때 윈도우가 보이지 않도록 감춥니다 . 메일 아이콘은 예제 소스 폴더에 들어있습니다 .

public Form1() {     InitializeComponent();

    // NotifyIcon 컨트롤의 아이콘 초기화 , 메일 알림 아이콘     notifyIcon1.Icon = new Icon( @"c:\project\resource\mail.ico" );

    // 마우스를 아이콘 위로 옮겼을 때 보여줄 메시지입니다 .     notifyIcon1.Text = " 클릭하세요 !!";

    // 처음에 실행했을 때 윈도우가 보이지 않도록 바꿉니다 .     this.Visible = false; }

Page 74: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

< 아세요 ? - NotifyIcon 컨트롤의 Text 속성 >

Text 속성은 시스템 트레이에 아이콘화 되어 있을 때 보여줄 메시지를 지정합니다 .

[ 그림 ] 마우스를 아이콘 위로 옮겼을 때 - c14_43

</ 아세요 ? - NotifyIcon 컨트롤의 Text 속성 >

Page 75: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

6. [ 아이콘화 시키기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 버튼을 누르면 윈도우를 감추어서 마치 아이콘화 된 것처럼 보이게 합니다 .

private void btnIcon_Click(object sender, System.EventArgs e) {     // 버튼을 누르면 윈도우를 감춥니다 .     this.Visible = false; }

7. NotifyIcon 컨트롤의 Click 이벤트 핸들러를 구현합니다 . 아이콘을 클릭하면 윈도우가 보이도록 합니다 .

private void notifyIcon1_Click(object sender, System.EventArgs e) {     // 시스템 트레이에서 아이콘을 클릭했을 때 , 윈도우를 보여줍니다 .     this.Visible = true; }

Page 76: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

5. 프로그램을 실행하면 아무런 윈도우가 보이지 않습니다 .시스템 트레이에 보면 조그만 메일 아이콘이 보이죠 ? 오른쪽 버튼으로 클릭해보세요 . 메뉴에서 [ 윈도우 보이기 ] 를 누르면 윈도우를 보여줄 것입니다 .물론 아이콘을 클릭해도 윈도우가 나타납니다 .

Page 77: 12 장 예제로 배우는 컨트롤

< 따라하기 - NotifyIcon 컨트롤 >

보여진 윈도우에서 [ 아이콘화 시키기 ] 버튼을 누르면 윈도우는 다시감춰집니다 .

< 아세요 ? - NotifyIcon 컨트롤 응용 > NotifyIcon 컨트롤은 응용해서 사용할 곳이 많습니다 . 예를 들면 새로운 메일이 도착했을 때 사용자에게 메일이 왔음을 알려주는 경우는 어떨까요 ? 아이콘을 바꾸어서 사용자에게 알려주는 것입니다 . NotifyIcon 컨트롤을 이용 해서 만들어보도록 하세요 . </ 아세요 ? - NotifyIcon 컨트롤 응용 >

Page 78: 12 장 예제로 배우는 컨트롤

</ 따라하기 - NotifyIcon 컨트롤 >

마무리 지금까지 앞장에서 다루지 못한 몇 가지 컨트롤을 알아보았습니다 . 컨트롤 프로그래밍이 그다지 어렵지는 않았죠 ? 더 많은 컨트롤과 멤버 를 다루지 못한 점이 조금 아쉽습니다 .

아직도 설명하지 못한 컨트롤이 많이 있지만 , 여러분 스스로 익혀보기 바랍니다 . 가능한 한 많은 컨트롤을 다루기 위해 예제를 통해서 각 컨트 롤의 핵심 멤버를 위주로 알아보았습니다 . 다루지 못한 다른 멤버에 대해 서도 여러분이 알아보기 바랍니다 .

다음 장에서는 메모장을 만들어보면서 파일 처리 기법 , 그리고 이 장에서 약속했던 메뉴 객체와 몇 가지 컨트롤을 예제를 통해서 알아볼 것입니다 .