12 장 예제로 배우는 컨트롤
DESCRIPTION
12 장 예제로 배우는 컨트롤. 공통 대화상자 컨트롤 리치 텍스트 박스와 메뉴 컨트롤 타이머 , 프로그레스바 , 날짜 / 시간 컨트롤. 대화상자 컨트롤. 공통 대화상자 다음은 닷넷 클래스에서 제공하는 공통 대화상자이다. 대화상자 컨트롤. 대화상자도 컨트롤이다 . C# 에서는 대화상자도 컨트롤로 제공 도구 상자에 가보면 공통 대화상자 컨트롤이 있다. 대화상자도 컨트롤. 대화상자도 컨트롤이다 . 대화상자를 사용하는 방법은 두 가지가 있다 . - PowerPoint PPT PresentationTRANSCRIPT
12 장 예제로 배우는 컨트롤
공통 대화상자 컨트롤리치 텍스트 박스와 메뉴 컨트롤타 이 머 , 프 로 그 레 스 바 , 날 짜 / 시 간 컨트롤
대화상자 컨트롤 공통 대화상자
다음은 닷넷 클래스에서 제공하는 공통 대화상자이다 .
공통 대화상자 설명
OpenFileDialog 파일을 열 때 파일을 선택하는 대화상자
SaveFileDialog 파일을 저장할 때 파일을 선택하는 대화상자 .
FontDialog 폰트 혹은 폰트 크기와 스타일을 지정할 때 사용하는 대화상자
ColorDialog 색상을 선택하는 대화상자
PrintDialog 프린트할 때 사용하는 대화상자
PrintPreview-Dialog 프린트 미리보기 대화상자
대화상자 컨트롤
대화상자도 컨트롤이다 . C# 에서는 대화상자도 컨트롤로
제공 도 구 상 자 에 가 보 면 공 통
대화상자 컨트롤이 있다 .
대화상자도 컨트롤 대화상자도 컨트롤이다 .
대화상자를 사용하는 방법은 두 가지가 있다 . 첫 번째는 도구 상자에서 대화상자 컨트롤을 추가하고 속성을 바꾸는 방법
private void button1_Click(object sender, Sys-tem.EventArgs e) { if ( colorDialog1.ShowDialog() == DialogResult.OK ) { // 색을 선택한 경우 } }
대화상자도 컨트롤 대화상자도 컨트롤이다 .
대화상자를 사용하는 방법은 두 가지가 있다 . 두 번째는 버튼을 클릭했을 때 이벤트 핸들러에서 대화상자
컨트롤을 생성하고 사용하는 방법
private void button1_Click(object sender, Sys-tem.EventArgs e) { // 컨트롤 생성 ColorDialog dlg = new ColorDialog();
if ( dlg.ShowDialog() == DialogResult.OK ) { // 색을 선택한 경우 } }
파일 대화상자 대화상자도 컨트롤이다 .
파일 대화상자는 파일 열기 대화상자와 파일 저장 대화상자가 있다 .
다음은 OpenFileDialog 컨트롤의 속성을 정리해놓은 것이다 .
속성 설명
Filter 어떤 파일 확장자를 보여줄 것인지 지정하는 파일 필터 리스트 예 ) openDlg.Filter = " 모든 파일 (*.*)|*.*";
FilterIndex 필터 리스트에서 디폴트로 사용할 파일 필터를 지정 예 ) openDlg.FilterIndex = 2;
Ini-tialDirec-tory
파일 다이얼로그를 처음 띄웠을 때 , 보여줄 시작 디렉토리를 지정 예 ) openDlg.InitialDirectory = "c:\\";
Title 파일 다이얼로그의 타이틀에 보여줄 문자열을 지정예 ) openDlg.Title = " 파일 열기 ";
FileName 대화상자에서 선택한 파일 이름을 알려준다 .
파일 대화상자
파일 저장 대화상자는 파일 열기 대화상자에서 설명한 속성을 그대로적용할 수 있습니다 . 다만 저장하는 용도로 대화상자를 사용하기때문에 , 디폴트 확장자와 디폴트 파일 이름을 미리 지정해줍니다 .
SaveFileDialog 컨트롤
속 성 설 명
DefaultExt
FileName
디폴트 확장자를 지정합니다 .예 ) DefaultExt = "txt";디폴트 파일 이름을 지정합니다 . 사용자가 선택한 파일이름을 구할 때도 사용합니다 . 예 ) FileName = "Doc1";
파일 대화상자
대화상자 컨트롤 속성은 속성 윈도우에서 바꾸어줍니다 . 대화상자를실행할 때는 다음과 같이 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 ); } }
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
1. 공통 대화상자를 이용해서 텍스트박스 컨트롤 속성을 바꾸어보는 예제입니다 . 프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .
프로젝트 유형 : Windows 응용 프로그램
프로젝트 이름 : CommonDialog
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .
객 체 객체 이름 속 성 지 정Text Box
ButtonButtonButton
Text Box1
Button1Button2Button3
Text = “안녕하세요 . 공통대화상자 예제입니다 .MultiLine = trueText = “폰트바꾸기”Text = “바탕색 바꾸기”Text = “전경색 바꾸기”
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >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
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >5. 프로그램을 실행하고 , [ 폰트 바꾸기 ]
버튼을 눌러보세요 . 폰트 대화상자에서 폰트 이름 , 스타일 , 폰트 크기를 바꿔보세요 .
폰트 대화상자에서 지정한 폰트 속성대로 텍스트박스의 폰트가 달라집니다 .
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
< 잠깐만요 . - 폰트 대화상자 > FontDialog 대화상자에서 지정한 글꼴 스타일은 Font 객체에 저장됩니다 . 글꼴 정보를 가져올 때는 Font 객체를참조해서 가져옵니다 .
Font font = fontDialog1.Font;
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
혹시 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
</ 잠깐만요 . - 폰트 대화상자 >
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
6. [ 바탕색 바꾸기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 색상 대화상자를 띄워서 텍스트박스의 바탕색을 지정합니다 .
private void button2_Click(object sender, System.EventArgs e) { // 색 대화상자 if ( colorDialog1.ShowDialog() == DialogResult.OK ) { // 바탕색 바꾸기 (BackColor 속성 ) textBox1.BackColor = colorDialog1.Color; } }
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
7. [ 전경색 바꾸기 ] 버튼의 Click 이벤트 핸들러를 구현합니다 . 색상 대화상자를 띄워서 텍스트박스의 글자색을 지정합니다 .
private void button3_Click(object sender, System.Even-tArgs e)
{ if ( colorDialog1.ShowDialog() == DialogResult.OK ) { // 전경색 바꾸기 (ForeColor 속성 ) textBox1.ForeColor = colorDialog1.Color; } }
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
< 잠깐만요 . - 색상 대화상자 >
ColorDialog 대화상자는 Color 객체를 멤버로 가지고 있습니다 . 사용자가 지정한 값은 Color 멤버를 참조해서 가져옵니다 .
Color color = colorDialog1.Color;
</ 잠깐만요 . - 색상 대화상자 >
< 따라하기 - 텍스트박스와 폰트 / 색상 대화상자 >
8. [ 바탕색 바꾸기 ] 버튼을 눌러보세요 . 색상 대화상자에서 색을 바꿔보세요 . 마찬가지로 [ 전경색 바꾸기 ] 버튼을 눌러서 색을 바꿉니다 . 색상 대화상자에서 지정한 색으로 텍스트박스의 글자색과 바탕색이 바뀝니다 .
메시지 박스
메시지 박스메시지 박스 객체는 오류 , 경고 , 알림을 나타내는 아이콘과 함께 사용자에게 메시지를 보여주는 대화상자입니다 . 다음은 MessageBox 객체의Show 메서드입니다 . 인자에 따라 메시지 박스에 보여지는 버튼과 아이콘이 달라집니다 .
DialogResult MessageBox.Show( string text, // 메시지 string caption, // 윈도우 타이틀 MessageBoxButtons buttons, // 버튼 구성
MessageBoxIcon icon ); // 아이콘
메시지 박스
◈ 버튼 구성 – MessageBoxButtons
맴 버 설 명
AbortRetryIg-noreOKOKCancelRetryCancelYesNoYesNoCancel
[ 멈춤 ],[ 다시 시도 ],[ 무시 ] 버튼 [ 확인 ] 버튼 , 디폴트 지정 [ 확인 ], [ 취소 ] 버튼 [ 다시 시도 ], [ 취소 ] 버튼 [ 예 ], [ 아니오 ] 버튼 [ 예 ], [ 아니오 ], [ 취소 ] 버튼
메시지 박스
◈ 아이콘 선택 – MessageBoxIconAsterisk, Error, Exclamation, Hand, Information, None, Question,Stop, Warning
다음과 같이 버튼이나 아이콘 인자 없이 Show 메서드를 부르면 ,[ 확인 ] 버튼만 보여줍니다 .
MessageBox.Show( “메시지” , “타이틀” );
메시지 박스
메시지박스 사용 예다음은 메시지박스 객체를 사용한 예입니다 . 메시지 박스는 i 아이콘과예 / 아니오 버튼을 보여줍니다 .
private void button1_Click(object sender, System.EventArgs e) { DialogResult res = MessageBox.Show( " 다음 단계로 넘어가시겠습니까 ?", " 메시지 박스 ", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk );
if ( res == DialogResult.Yes ) { MessageBox.Show( " 다음 단계로 넘어갑니다 .", " 선택 결과 " ); } }
메시지 박스
사용자가 [ 예 ] 버튼을 누른 경우 , Show 메서드가 리턴한 결과는DialogResult.Yes 값입니다 .리턴한 결과 값을 비교해서 사용자가 선택한버튼을 알아낼 수 있습니다 .
< 아세요 ? - DialogResult >
윈도우를 대화상자로 실행하려면 ShowDialog 메서드를 부릅니다 . 이 메서드는 Dialo-gResult값을 리턴하는데 , 이 값은 사용자가 선택한 상태를 알려줍니다 . 보통 이 리턴 값은 대화상자위에 있는 명령 버튼 중에서 어떤 것을 선택했는지에 따라 달라집니다 .
if ( dlg.ShowDialog() == DialogResult.OK ) { // OK 버튼을 누른 경우 }
</ 아세요 ? - DialogResult >
리치텍스트박스와 메뉴
리치텍스트박스리치텍스트박스 컨트롤은 워드프로세서 수준의 편집 기능을 가진 컨트롤입니다 . 텍스트박스 컨트롤의 단점은 처리할 수 있는 텍스트 양에제한이 있고 , 하나의 폰트만 사용할 수 있다는 점입니다 . 리치텍스트박스 컨트롤은 이런 문제점을 해결하고 문단 개념을 추가한 텍스트 편집 컨트롤입니다 .
리치텍스트박스와 메뉴
메인 메뉴메뉴도 하나의 컨트롤입니다 . 다른 컨트롤과 마찬가지로 도구 상자에서 메인 메뉴 컨트롤을 추가하고 속성을 바꿔줍니다 . 메뉴를 구성하려면 먼저 MainMenu 객체를 추가합니다 . 그리고 폼 디자인 윈도우 상단에 보이는 메뉴 속성을 수정하면 됩니다 .
리치텍스트박스와 메뉴
MainMenu 객체는 여러 MenuItem 객체를 모아둔 콜렉션 형태로 구성되며 , 각각 메뉴 객체는 하나의 메뉴 항목을 나타냅니다 . 각 객체마다 속성을 지정해서 메뉴를 정의합니다 . 예를 들면 , 메뉴를 안 보이게 한다거나 체크 표시를 하거나 , Disable 상태로 만들 수 있습니다 .
리치텍스트박스와 메뉴
메인 메뉴 구성은 다음 장에서 메모장 예제를 만들어보면서 설명하도록 하겠습니다 .
< 아세요 ? - 메뉴 속성 바꾸기 >
MenuItem 객체의 Checked 속성에 true 값을 주면 , 메뉴가 보여질 때 앞부분에 체크 표시가 붙어 있죠 . 메뉴를 Disable 시키려면 Enable 값에 false값을 줍니다 .
miOpen.Checked = true; // 메뉴에 체크 표시 miOpen.Enable = false; // 메뉴 Disable
< 아세요 ? - 메뉴 속성 바꾸기 >
리치텍스트박스와 메뉴
컨텍스트 메뉴 구성컨텍스트 메뉴는 컨트롤에서 오른쪽 버튼을 클릭했을 때 나타나는 메뉴입니다 .도구 상자에서 ContextMenu 객체를 추가할 수 있습니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메
뉴 >
1. 리치텍스트박스 컨트롤을 추가하고 , ContextMenu 객체를 통해서 기본편집 기능과 폰트 / 색상 속성을 바꾸어보는 예제입니다 . 프로젝트 이름과작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .
프로젝트 유형
프로젝트 이름
Windows 응용 프로그램
SimpleWordPad
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
3. 리치텍스트박스에서 오른쪽 버튼을 클릭했을 때 보여줄 컨텍스트메뉴입니다 . 메뉴에는 간단한 편집 기능을 추가합니다 . 트레이에있는 컨텍스트 메뉴를 선택하고 , 다음과 같이 메뉴를 구성합니다 .
객체이름 Text 속성miCutmiCopymiPastemiSelectAllmiSeparatormiFontmiFontColormiSeparatormiSavemiLoad
잘라내기 복사 붙여넣기 모두 선택 - 폰트 지정 폰트 색 지정 - 저장하기 읽어오기
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
메뉴 구성 화면은 메뉴 객체를 선택했을 때만 나타났다가 사라집니다 .실제로 프로그램을 실행했을 때는 보이지 않습니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
4. 디자인 윈도우에서 리치텍스트박스 컨트롤을 선택해보세요 . 속성 윈도우를 보면 , 다음과 같이 컨텍스트 메뉴를 지정할 수 있습니다 . ContextMenu 속성을 클릭하면 , 현재 폼에 정의된 컨텍스트 메뉴리스트를 보여줍니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >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(); // 모두 선택 }
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
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; } }
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
< 아세요 ? - SelectionXXX 속성 >
텍스트박스와 달리 리치텍스트박스는 문단 (paragraph) 단위 개념이 있으며 ,스타일을 다양하게 지정할 수 있습니다 . 다음은 리치텍스트박스에서 특정텍스트 영역을 선택하고 스타일을 지정할 때 사용하는 속성입니다 .
</ 아세요 ? - SelectionXXX 속성 >
속 성 설 명
SelectionFont SelectionColorSelectionAlignmentSelectionBulllet
선택된 영역에 폰트 속성을 지정합니다 . 선택된 영역에 색상 속성을 지정합니다 .선택된 영역에 정렬을 지정합니다 .선택된 영역에 블렛을 지정합니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
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" ); }
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
< 설명 - SaveFile/LoadFile 메서드 >
리치텍스트박스 컨트롤은 RTF 포맷을 사용해서 파일을 저장하고 읽어옵니다 . 파일을 저장할 때는 SaveFile 메서드를 부르고 , 읽어올 때는LoadFile 메서드를 부릅니다 . 메서드에는 파일 이름을 포함한 경로를넘겨줍니다 .
</ 설명 - SaveFile/LoadFile>
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
8. 프로그램을 실행해보세요 . 리치텍스트박스 컨트롤에서 오른쪽 버튼을 누르면 다음과 같이 컨텍스트 메뉴가 뜹니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
9. 메뉴에서 제공하는 편집 기능을 사용해보고 , 폰트 속성도 바꾸어보세요 . 전체가 하나의 폰트 속성을 갖는 것이 아니라 문서의 일부분을 선택해서 폰트 속성을 지정할 수 있습니다 .
< 따라하기 - 리치텍스트박스와 컨텍스트 메뉴 >
10. 편집한 문서를 저장했다가 다시 읽어보세요 . 편의상 RTF 파일 이름을 코드에 지정해두었습니다 .
타이머와 프로그레스바
타이머타이머 컨트롤은 정해진 시간 간격마다 어떤 코드를 실행할 때 사용합니다 .타이머가 시작되면 일정 시간 간격으로 지정한 메서드를 불러줍니다 .
속 성 설 명Enabled
Interval
StartStop
타이머 시작 / 멈춤을 지정합니다 . 예 ) timer1.Enabled = true; 서드를 불러주는 시간 간격을 지정합니다 . millisec 단위입니다 . (초기값 :100) 예 ) timer1.Interval = 500;타이머를 시작합니다 . 예 ) timer1.Start(); 타이머를 멈춥니다 . 예 ) timer1.Stop();
타이머와 프로그레스바
Enable 속성에 true 값을 넣으면 Start 메서드가 불려져 타이머가 시작됩니다 . 반대로 false 값을 넣으면 Stop 메서드가 불려져 타이머가 멈춥니다 . Enable 값을 검사해서 타이머가 시작 여부를 알 수도 있습니다 .
if ( Enabled ) { // 타이머가 시작된 경우 }
Timer 컨트롤의 Tick 이벤트는 타이머를 시작했을 때 주기적으로 발생하는 이벤트입니다 . 이벤트가 발생할 때마다 불려질 이벤트 핸들러를 구현합니다 .
private void timer1_Tick(object sender, System.EventArgs e) { // 일정 시간 간격으로 실행될 코드 }
타이머와 프로그레스바
프로그레스바 컨트롤은 시간이 오래 걸리는 어떤 작업을 할 때 , 사용자에게 현재 진행 정도를 알려줄 때 사용합니다 . 윈도우에서 파일을 복사하거나 웹에서 파일을 다운로드 받을 때 많이 볼 수 있는 컨트롤로 , 사용자에게 지루함을 덜어주면서 계속 실행되고 있음을 알려줍니다 .
타이머와 프로그레스바
예를 들면 네트워크를 통해서 파일을 다운로드 받는다거나 VS.NET 과 같은 큰 프로그램을 설치할 때 , 현재 진행 상황과 함께 앞으로 남은 시간을 계산해서 보여줍니다 .이렇게 오랜 시간이 걸리는 작업을 할 때 사용자에게 얼마나 진행되었으며 남은 시간이얼마나 되는지 알려줄 수 있습니다 .※다음은 ProgressBar 컨트롤의 주요 속성입니다 .
속 성 설 명Minimum
Maxmum
Step
Value
프로그레스 컨트롤에서 처음 시작 값입니다 .예 ) progressBar1.Minimum=0;프로그레스 컨트롤에서 맨 마지막 값입니다 .예 ) progressBar1.Maxmum=100;값의 증가치를 가지고 있습니다 .예 )progressBar1.Step=10;현재 값을 알려줍니다 .예 ) lable1.Text = value.ToString()+”%”;
< 따라하기 - 파일 다운로드 상태 보여주기 >
1. 타이머를 이용해서 프로그레스바를 조금씩 증가시키는 예제입니다 .2. 여러 개의 파일을 다운로드받는다고 가정하고 , 전체 파일에 대한 다운로드 퍼센트와 각 파일에 대한 다운로드 퍼센트를 보여줍니다 .프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .
프로젝트 유형프로젝트 이름
Windows 응용 프로그램 TimerProgress
< 따라하기 - 파일 다운로드 상태 보여주기 >
2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .
< 따라하기 - 파일 다운로드 상태 보여주기 >
객 체 객체 이름 속성 지정Buton
LableLable
ProgressBarProgressBar
Timer
Button
Lable1Lable2
ProgressBar1ProgressBar2
timer1
Text = “다운로드”
Text = “전체 파일 : 0%;Text = “파일 : 0%”
Minimum = 0 ,Maximum = 100Minimum = 0, Maximum = 100
Interval = 100
< 따라하기 - 파일 다운로드 상태 보여주기 >
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 = " 다운로드 멈춤 "; } }
< 따라하기 - 파일 다운로드 상태 보여주기 >
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
< 따라하기 - 파일 다운로드 상태 보여주기 >
{ // 전체 파일 다운로드 끝남 , 초기화 timer1.Stop(); button1.Text = " 다운로드 시작 ";
progressBar1.Value = 0; progressBar2.Value = 0; }
label1.Text = “전체 파일 : ” + progressBar1.Value.ToString() + "%"; }
label2.Text = “파일 : ” + progressBar2.Value.ToString() + "%"; }
< 따라하기 - 파일 다운로드 상태 보여주기 >
4. 예제는 타이머를 이용해서 마치 파일을 다운로드받는 것처럼 흉내낸 프로그램입니다 . 프로그램을 실행하고 [ 다운로드 시작 ] 버튼을 눌러보세요 . 파일 프로그레스바가 끝날 때마다 전체 파일 프로그레스바도 조금씩 증가합니다 . 둘 다 100% 까지 진행하면 멈춥니다 .
기타 컨트롤
트랙바 (TrackBar) 트랙바 컨트롤은 불연속된 값이나 어떤 범위의 값을 입력받을 때 사용합니다 . 정해진 범위 내에서 값을 증가 또는 감소시켜 조절할 수 있습니다 . 스크롤바와 유사한 모양을 가지고 있으며 , 기능적으로 도 비슷합니다 . 윈도우에 있는 볼륨 조절 대화상자를 보면 다양한 모습으로 트랙바를 사용 한 예를 볼 수있습니다 .
기타 컨트롤
속 성 설 명MinimumMaximumTickFrequencyValue
트랙바에서 지정할 수 있는 최소값트백바에서 지정할 수 있는 최대값눈금 간에 간격현재 값
픽처박스 (PictureBox)
픽처박스 컨트롤은 이미지를 읽어서 보여줄 때 사용합니다 .이 컨트롤의 주된 용도는 사용자에게 이미지를 보여주는 것입니다 .
픽처박스 (PictureBox)
속 성 설 명SizeMode
Image
이미지를 어떤 식으로 보여줄 것인지 지정합니다 .예 )pictureBox1.SizeMode = pictureBoxSizeMode.StretchIm-age;보여줄 이미지를 지정합니다 .
픽처박스 (PictureBox)
< 아세요 ? – PictureBoxSizeMode 속성 >PictureBoxSizeMode 는 다음과 같은 값을 가지고 있습니다 .픽처박스 객체의 SizeMode 속성에 지정하는 값입니다 .
pictureBox1.SizeMode = PictureBoxSizeMode.Normal
</ 아세요 ? – PictureBoxSizeMode 속성 >
속 성 설 명NomalStretchIm-ageAutoSizeCenterIm-age
컨트롤 크기와 상관없이 원래 이미지 크기 그대로 보여줍니다 .컨트롤 크기에 맞춰 이미지를 늘리거나 줄여서 조여줍니다 .원래 이미지 크기에 맞춰 컨트롤 크기를 자동으로 조절해줍니다 .컨트롤 안에서 이미지가 가운데 위치하도록 보여줍니다 .
이미지리스트 컨트롤
프로그램을 작성할 때 , 여러 개의 이미지를다루는 경우가 자주 필요합니다 .예를 들어 리스트 컨트롤이나 툴바 컨트롤은여러 이미지를 필요로 하는데 ,이미지리스트 (ImageList) 컨트롤을 사용해서지정합니다 .
도구 상자에서 이미지 리스트 컨트롤을 추가하고 어떤 속성이 있는지 속성 윈 도우를 보세요 . Images 속성은 여러 이미지를 담고 있는 이미지 콜렉션입니다 .
이미지리스트 컨트롤
속성 윈도우에서 Images 항목 옆에 있는 조그만 버튼을 누르면 , 이미지콜렉션을 편집할 수 있는 대화상자가 뜹니다 . [ 추가 ] 버튼을 눌러서 이미지를 추가합니다 .
이미지리스트 컨트롤
다음은 픽처박스에 이미지를 보이는 예입니다 . 콜렉션에 들어 있는 이미지는 인덱스 값을 지정해서 사용할 수 있습니다 .
pictureBox1.Image = imageList1.Images[0]; // 첫 번째 이미지 pictureBox1.Image = imageList1.Images[1]; // 두 번째 이미지
다음은 픽처박스에 이미지를 보이는 예입니다 . 콜렉션에 들어 있는 이미지는 인덱스 값을 지정해서 사용할 수 있습니다 .
pictureBox1.Image = imageList1.Images[0]; // 첫 번째 이미지 pictureBox1.Image = imageList1.Images[1]; // 두 번째 이미지
이미지리스트 컨트롤다음은 폼 윈도우에 이미지를 그린 실행 화면입니다 .
</ 요거 아세요 ? - Draw 메서드 >
툴바와 상태바
툴바는 같은 크기의 여러 버튼을 묶어서 관리해주는 컨트롤입니다 . 상태바 컨트롤은 보통 윈도우 아래 부분에 위치하면서 , 사용자에게 현재 작업중인 정보를 알려줍니다 .
툴바와 상태바
툴바와 상태바 예제는 다음 장에서 설명하도록 하겠습니다 .
< 잠깐만 - 툴바의 이미지리스트 >
툴바는 앞에서 설명한 이미지리스트 컨트롤을 이용해서 툴바 버튼을만들어냅니다 . 툴바뿐만 아니라 리스트 컨트롤에서도 이미지 리스트를 사용합니다 .
</ 잠깐만 - 툴바의 이미지리스트 >
새로운 컨트롤
DateTimePicker 컨트롤은 사용자에게 날짜와 시간을 선택하도록 할 때 사용 하는 컨트롤입니다 . 콤보박스처럼 버튼을 누르면 아래로 펼쳐집니다 . 날짜를 선택할수 있는 달력 컨트롤이 보이죠 .
새로운 컨트롤DateTimePicker 컨트롤
속 성 설 명MaxDateMinDateValueFormat
선택할 수 있는 최대 날짜 (초기값 : 12/31/9998)선택할 수 있는 최소 날짜 (초기값 : 1/1/1753)선택한 날짜 / 시간 (DateTime 객체 )보여줄 날짜 / 시간 포맷을 지정합니다 .(Long, Short, Time)예 ) dateTimePicker1.Format = DateTimePickerFor-mat.Short;
새로운 컨트롤
MonthCalendar 컨트롤은 날짜 범위를 입력받을 수 있습니다 . 컨트롤에서 날짜를 선택하고 마우스를 드래그하면 여러 날짜를 선택할 수있습니다 .다음은 선택한 날짜 범위 정보를 구한 예입니다 .
새로운 컨트롤MonthCalendar 컨트롤
속 성 설 명MaxDateMinDateSelectionStartSelectionEndSelection-Range
선택할 수 있는 최대 날짜 (초기값 : 12/31/9998)선택할 수 있는 최소 날짜 (초기값 : 1/1/1753)선택한 날짜에서 시작 날짜 (DateTime 객체 )선택한 날짜에서 끝나는 날짜 (DateTime 객체 )선택한 날짜 영역
새로운 컨트롤
다음은 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, " 선택 날짜 " ); }
NotifyIcon 컨트롤
윈도우 화면에서 오른편 아래에 보면 시스템 트레이가 보이죠 ?NotifyIcon 컨트롤은 시스템 트레이에 아이콘을 두는 프로그램을 작성할 때 사용합니다 . 보통 오른쪽 버튼으로 아이콘을 클릭하면 컨텍스트 메뉴가 나타나도록 구현합니다 .
NotifyIcon 컨트롤
NotifyIcon 컨트롤의 Click 이벤트는 시스템 트레이에 있는 아이콘을클릭했을 때 발생하는 이벤트입니다 . 일반적으로 Click 이벤트가 발생하면 주 작업 윈도우를 띄워줍니다 .
private void notifyIcon1_Click(object sender, System.EventArgs e) { // 트레이에 있는 아이콘을 클릭했을 때 }
< 따라하기 - NotifyIcon 컨트롤 >
1. 시스템 트레이에 아이콘을 추가하고 실행해보는 예제입니다 .프로젝트 이름과 작업할 폴더를 지정하고 새로운 프로젝트를 생성합니다 .프로젝트 유형 : Windows 응용 프로그램 프로젝트 이름 : NotifyIcon
2. 다음과 같이 폼 윈도우를 구성하고 , 컨트롤 속성을 지정합니다 .
< 따라하기 - NotifyIcon 컨트롤 >
3. 컨텍스트 메뉴를 추가하고 다음과 같이 구성합니다 . 시스템 트레이에 있는 아이콘을 클릭했을 때 보여줄 컨텍스트 메뉴입니다 .
4. NotifyIcon 컨트롤의 컨텍스트 메뉴를 추가합니다 . 속성 윈도우에서 Con-textMenu 속성을 선택하고 컨텍스트 메뉴를 선택합니다 .
< 따라하기 - NotifyIcon 컨트롤 >
5. 생성자에서 NotifyIcon 컨트롤의 속성을 바꿔줍니다 . 아이콘을 초기화하고 , 처음에 실행했을 때 윈도우가 보이지 않도록 감춥니다 . 메일 아이콘은 예제 소스 폴더에 들어있습니다 .
public Form1() { InitializeComponent();
// NotifyIcon 컨트롤의 아이콘 초기화 , 메일 알림 아이콘 notifyIcon1.Icon = new Icon( @"c:\project\resource\mail.ico" );
// 마우스를 아이콘 위로 옮겼을 때 보여줄 메시지입니다 . notifyIcon1.Text = " 클릭하세요 !!";
// 처음에 실행했을 때 윈도우가 보이지 않도록 바꿉니다 . this.Visible = false; }
< 따라하기 - NotifyIcon 컨트롤 >
< 아세요 ? - NotifyIcon 컨트롤의 Text 속성 >
Text 속성은 시스템 트레이에 아이콘화 되어 있을 때 보여줄 메시지를 지정합니다 .
[ 그림 ] 마우스를 아이콘 위로 옮겼을 때 - c14_43
</ 아세요 ? - NotifyIcon 컨트롤의 Text 속성 >
< 따라하기 - 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; }
< 따라하기 - NotifyIcon 컨트롤 >
5. 프로그램을 실행하면 아무런 윈도우가 보이지 않습니다 .시스템 트레이에 보면 조그만 메일 아이콘이 보이죠 ? 오른쪽 버튼으로 클릭해보세요 . 메뉴에서 [ 윈도우 보이기 ] 를 누르면 윈도우를 보여줄 것입니다 .물론 아이콘을 클릭해도 윈도우가 나타납니다 .
< 따라하기 - NotifyIcon 컨트롤 >
보여진 윈도우에서 [ 아이콘화 시키기 ] 버튼을 누르면 윈도우는 다시감춰집니다 .
< 아세요 ? - NotifyIcon 컨트롤 응용 > NotifyIcon 컨트롤은 응용해서 사용할 곳이 많습니다 . 예를 들면 새로운 메일이 도착했을 때 사용자에게 메일이 왔음을 알려주는 경우는 어떨까요 ? 아이콘을 바꾸어서 사용자에게 알려주는 것입니다 . NotifyIcon 컨트롤을 이용 해서 만들어보도록 하세요 . </ 아세요 ? - NotifyIcon 컨트롤 응용 >
</ 따라하기 - NotifyIcon 컨트롤 >
마무리 지금까지 앞장에서 다루지 못한 몇 가지 컨트롤을 알아보았습니다 . 컨트롤 프로그래밍이 그다지 어렵지는 않았죠 ? 더 많은 컨트롤과 멤버 를 다루지 못한 점이 조금 아쉽습니다 .
아직도 설명하지 못한 컨트롤이 많이 있지만 , 여러분 스스로 익혀보기 바랍니다 . 가능한 한 많은 컨트롤을 다루기 위해 예제를 통해서 각 컨트 롤의 핵심 멤버를 위주로 알아보았습니다 . 다루지 못한 다른 멤버에 대해 서도 여러분이 알아보기 바랍니다 .
다음 장에서는 메모장을 만들어보면서 파일 처리 기법 , 그리고 이 장에서 약속했던 메뉴 객체와 몇 가지 컨트롤을 예제를 통해서 알아볼 것입니다 .