12장예제로배우는컨트롤_요약

Download Report

Transcript 12장예제로배우는컨트롤_요약

12장 예제로 배우는 컨트롤
공통 대화상자 컨트롤
리치 텍스트 박스와 메뉴 컨트롤
타이머, 프로그레스바, 날짜/시간 컨트롤
대화상자 컨트롤

공통 대화상자

다음은 닷넷 클래스에서 제공하는 공통 대화상자이다.
공통 대화상자
설명
OpenFileDialog
파일을 열 때 파일을 선택하는 대화상자
SaveFileDialog
파일을 저장할 때 파일을 선택하는 대화상자.
FontDialog
폰트 혹은 폰트 크기와 스타일을 지정할 때
사용하는 대화상자
ColorDialog
색상을 선택하는 대화상자
PrintDialog
프린트할 때 사용하는 대화상자
PrintPreviewDialog 프린트 미리보기 대화상자
대화상자 컨트롤

대화상자도 컨트롤이다.


C#에서는 대화상자도 컨트롤로
제공
도구 상자에 가보면 공통 대화상자
컨트롤이 있다.
대화상자도 컨트롤

대화상자도 컨트롤이다.

대화상자를 사용하는 방법은 두 가지가 있다.

첫 번째는 도구 상자에서 대화상자 컨트롤을 추가하고 속성을 바꾸는 방법
private void button1_Click(object sender, System.EventArgs e)
{
if ( colorDialog1.ShowDialog() == DialogResult.OK )
{
// 색을 선택한 경우
}
}
대화상자도 컨트롤

대화상자도 컨트롤이다.
 대화상자를 사용하는 방법은 두 가지가 있다.

두 번째는 버튼을 클릭했을 때 이벤트 핸들러에서 대화상자 컨
트롤을 생성하고 사용하는 방법
private void button1_Click(object sender, System.EventArgs e)
{
// 컨트롤 생성
ColorDialog dlg = new ColorDialog();
if ( dlg.ShowDialog() == DialogResult.OK )
{
// 색을 선택한 경우
}
}
파일 대화상자

대화상자도 컨트롤이다.


파일 대화상자는 파일 열기 대화상자와 파일 저장 대화상자가 있다.
다음은 OpenFileDialog 컨트롤의 속성을 정리해놓은 것이다.
속성
설명
Filter
어떤 파일 확장자를 보여줄 것인지 지정하는 파일 필터 리스트
예) openDlg.Filter = "모든 파일 (*.*)|*.*";
FilterIndex
필터 리스트에서 디폴트로 사용할 파일 필터를 지정
예) openDlg.FilterIndex = 2;
InitialDirectory
파일 다이얼로그를 처음 띄웠을 때, 보여줄 시작 디렉토리를 지정
예) 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
Text Box1
Button
Button
Button
Button1
Button2
Button3
속성지정
Text = “안녕하세요. 공통대화상자 예제입니다.
MultiLine = true
Text = “폰트바꾸기”
Text = “바탕색 바꾸기”
Text = “전경색 바꾸기”
<따라하기 - 텍스트박스와 폰트/색상 대화상자>
3. 도구 상자에서 다음 공통 대화상자 컨트롤을 추가합니다.
객체
객체 이름
속성지정
Font Dialog
fontDialog
Color Dialog
colorDialog
4. [폰트 바꾸기] 버튼의 Click 이벤트 핸들러를 구현합니다. 글꼴 대화상자를 띄워서
텍스트박스의 폰트 스타일을 지정합니다.
private void button1_Click(object sender, System.EventArgs e)
{
// 폰트 대화상자
if ( fontDialog1.ShowDialog() == DialogResult.OK )
{
// 선택한 폰트 지정
textBox1.Font = fontDialog1.Font;
}
}
<따라하기 - 텍스트박스와 폰트/색상 대화상자>
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.EventArgs 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
맴버
AbortRetryIgnore
OK
OKCancel
RetryCancel
YesNo
YesNoCancel
설명
[멈춤],[다시 시도],[무시] 버튼
[확인] 버튼, 디폴트 지정
[확인], [취소] 버튼
[다시 시도], [취소] 버튼
[예], [아니오] 버튼
[예], [아니오], [취소] 버튼
메시지 박스
◈ 아이콘 선택 – MessageBoxIcon
Asterisk, 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 메서드를 부릅니다. 이 메서드는 DialogResult
값을 리턴하는데, 이 값은 사용자가 선택한 상태를 알려줍니다. 보통 이 리턴 값은 대화상자
위에 있는 명령 버튼 중에서 어떤 것을 선택했는지에 따라 달라집니다.
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. 리치텍스트박스에서 오른쪽 버튼을 클릭했을 때 보여줄 컨텍스트
메뉴입니다. 메뉴에는 간단한 편집 기능을 추가합니다. 트레이에
있는 컨텍스트 메뉴를 선택하고, 다음과 같이 메뉴를 구성합니다.
객체이름
miCut
miCopy
miPaste
miSelectAll
miSeparator
miFont
miFontColor
miSeparator
miSave
miLoad
Text 속성
잘라내기
복사
붙여넣기
모두 선택
폰트 지정
폰트 색 지정
저장하기
읽어오기
<따라하기 - 리치텍스트박스와 컨텍스트 메뉴>
메뉴 구성 화면은 메뉴 객체를 선택했을 때만 나타났다가 사라집니다.
실제로 프로그램을 실행했을 때는 보이지 않습니다.
<따라하기 - 리치텍스트박스와 컨텍스트 메뉴>
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) 단위 개념이 있으며,
스타일을 다양하게 지정할 수 있습니다. 다음은 리치텍스트박스에서 특정
텍스트 영역을 선택하고 스타일을 지정할 때 사용하는 속성입니다.
속 성
SelectionFont
SelectionColor
SelectionAlignment
SelectionBulllet
</아세요? - SelectionXXX 속성 >
설 명
선택된 영역에 폰트 속성을 지정합니다.
선택된 영역에 색상 속성을 지정합니다.
선택된 영역에 정렬을 지정합니다.
선택된 영역에 블렛을 지정합니다.
<따라하기 - 리치텍스트박스와 컨텍스트 메뉴>
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
Start
Stop
설 명
타이머 시작/멈춤을 지정합니다.
예) 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
객체 이름
Button
속성 지정
Text = “다운로드”
Lable
Lable
Lable1
Lable2
Text = “전체 파일 : 0%;
Text = “파일 : 0%”
ProgressBar
ProgressBar
ProgressBar1
ProgressBar2
Minimum = 0 ,Maximum = 100
Minimum = 0, Maximum = 100
Timer
timer1
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)
트랙바 컨트롤은 불연속된 값이나 어떤 범위의 값을 입력받을 때 사용합니다.
정해진 범위 내에서 값을 증가 또는 감소시켜 조절할 수 있습니다.
스크롤바와 유사한 모양을 가지고 있으며, 기능적으로 도 비슷합니다.
윈도우에 있는 볼륨 조절 대화상자를 보면 다양한 모습으로 트랙바를 사용 한 예를 볼 수
있습니다.
기타 컨트롤
속성
Minimum
Maximum
TickFrequency
Value
설명
트랙바에서 지정할 수 있는 최소값
트백바에서 지정할 수 있는 최대값
눈금 간에 간격
현재 값
픽처박스(PictureBox)
픽처박스 컨트롤은 이미지를 읽어서 보여줄 때 사용합니다.
이 컨트롤의 주된 용도는 사용자에게 이미지를 보여주는 것입니다.
픽처박스(PictureBox)
속성
SizeMode
Image
설명
이미지를 어떤 식으로 보여줄 것인지 지정합니다.
예)pictureBox1.SizeMode =
pictureBoxSizeMode.StretchImage;
보여줄 이미지를 지정합니다.
픽처박스(PictureBox)
<아세요? – PictureBoxSizeMode 속성>
PictureBoxSizeMode는 다음과 같은 값을 가지고 있습니다.
픽처박스 객체의 SizeMode 속성에 지정하는 값입니다.
pictureBox1.SizeMode = PictureBoxSizeMode.Normal
속성
설명
컨트롤 크기와 상관없이 원래 이미지 크기 그대로 보여줍니다.
Nomal
컨트롤 크기에 맞춰 이미지를 늘리거나 줄여서 조여줍니다.
StretchImage
원래 이미지 크기에 맞춰 컨트롤 크기를 자동으로 조절해줍니다.
AutoSize
컨트롤 안에서 이미지가
</아세요? – PictureBoxSizeMode
속성>가운데 위치하도록 보여줍니다.
CenterImage
이미지리스트 컨트롤
프로그램을 작성할 때, 여러 개의 이미지를
다루는 경우가 자주 필요합니다.
예를 들어 리스트 컨트롤이나 툴바 컨트롤은
여러 이미지를 필요로 하는데,
이미지리스트(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 컨트롤
속성
MaxDate
MinDate
Value
Format
설명
선택할 수 있는 최대 날짜 (초기값 : 12/31/9998)
선택할 수 있는 최소 날짜 (초기값 : 1/1/1753)
선택한 날짜/시간 (DateTime 객체)
보여줄 날짜/시간 포맷을 지정합니다.(Long, Short, Time)
예) dateTimePicker1.Format =
DateTimePickerFormat.Short;
새로운 컨트롤
MonthCalendar 컨트롤은 날짜 범위를 입력받을 수 있습니다.
컨트롤에서 날짜를 선택하고 마우스를 드래그하면 여러 날짜를 선택할 수
있습니다.
다음은 선택한 날짜 범위 정보를 구한 예입니다.
새로운 컨트롤
MonthCalendar 컨트롤
속성
MaxDate
MinDate
SelectionStart
SelectionEnd
SelectionRange
설명
선택할 수 있는 최대 날짜 (초기값 : 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 컨트롤의 컨텍스
트 메뉴를 추가합니다. 속성
윈도우에서 ContextMenu 속
성을 선택하고 컨텍스트 메
뉴를 선택합니다.
<따라하기 - 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 컨트롤>
마무리



지금까지 앞장에서 다루지 못한 몇 가지 컨트롤을 알아보았습니다.
컨트롤 프로그래밍이 그다지 어렵지는 않았죠? 더 많은 컨트롤과 멤버
를 다루지 못한 점이 조금 아쉽습니다.
아직도 설명하지 못한 컨트롤이 많이 있지만, 여러분 스스로 익혀보기
바랍니다. 가능한 한 많은 컨트롤을 다루기 위해 예제를 통해서 각 컨트
롤의 핵심 멤버를 위주로 알아보았습니다. 다루지 못한 다른 멤버에 대해
서도 여러분이 알아보기 바랍니다.
다음 장에서는 메모장을 만들어보면서 파일 처리 기법, 그리고 이 장에서
약속했던 메뉴 객체와 몇 가지 컨트롤을 예제를 통해서 알아볼 것입니다.