Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[컨트롤, 날짜관련] MonthCalendar , DateTimePicker

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 6316

이번 포스트에서는 윈폼 컨트롤 중 날짜와 관련된 두 컨트롤에 대해서 알아 보겠습니다

 

1. MonthCalendar 컨트롤

 

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

 

다음은 이 컨트롤의 상속 계층 구조 입니다

 

이 컨트롤은 '//' 현태의 날짜 정보를 핸들링 할 수 있도록 제공하는 달력 모양의 UI 컨트롤 입니다

 

 

기본적으로 선택된 날짜에 대한 정보는 SelectionStart 속성과 SelectionEnd 속성으로 반환합니다

두 속성 모두 DateTime 을 반환하여 선택된 시작날짜와 마지막 날짜를 반환합니다

, MonthCalendar 컨트롤은 여러 날을 지정할 수 있다는 말이 됩니다

또한 이 컨트롤은 SelectionRange 속성을 통해 선택된 날짜범위를 나타내는 SelectionRange 객체를 반환합니다

 

단 여러 날을 지정 할 경우 최대값을 설정 할 수 있는데요, 기본 값은 7 입니다

, 마우스나 Shift 키 및 SelectionRange를 통해 달력에서 여러 날을 지정할 때 최대 7일 까지만 지정 가능하다는 것입니다

이 값을 변경 하려면 MaxSelectionCount 값을 조정하면 됩니다

 

여기서 한가지 주의할 것이 있습니다

MonthCalendar 는 달력에서 Shift 키나 마우스로 여러날짜를 지정할 수 있다고 했는데요...

만일 비주얼 스타일을 사용한다면 여러 날짜의 선택 범위가 제대로 그려지지 않습니다

 

아래 그림을 보시면,

비주얼스타일의 사용유/무에 따라 컨트롤의 선택 범위가 이상하게 그려짐을 알 수 있습니다

 

 

 

VS 2005 부터는 기본적으로 Program.cs 파일에 Application.EnableVisualStyles(); 코드를 자동 삽입하여

 비주얼 스타일을 사용하기 때문에 주의해야 합니다

 

다음의 코드는 MonthCalendar 컨트롤에 선택되는 날짜를 지정하고 선택 된 날짜의 정보를 보여주는 샘플입니다

 private void button1_Click(object sender, EventArgs e)
 {
       this.monthCalendar1.SelectionRange = new SelectionRange(
            DateTime.Parse("2008-01-01"), DateTime.Parse("2008-01-09"));

 

       MessageBox.Show("선택된 시작 날짜 : " + this.monthCalendar1.SelectionStart.ToShortDateString());
       MessageBox.Show("선택된 마지막 날짜 : " + this.monthCalendar1.SelectionEnd.ToShortDateString());
 }

 

 

개발자는 이 달력 중 특정 부분에 대한 모양을 변경 할 수 있는 기능이 있습니다

만일 달력에 주(Week) 정보를 같이 보여 주고 싶으면 ShowWeekNumbers 속성을 true 로 설정하시면 됩니다

그러면 다음 그림처럼 달력 왼쪽에 주(Week) 번호가 같이 나오게 됩니다

 

또한 ShowToday ShowTodayCircle 속성을 통해 달력 밑에 오늘 날짜를 출력하게 할 것이냐,

오늘 날짜에 빨간 색 원을 강조 할 것이냐에 대한 설정을 할 수 있습니다

 

그리고 또 하나 재미있는 속성이 있는데 바로 CalendarDimensions 속성 입니다

이 속성은 Size 구조체를 반환하는 속성으로써 달력을 몇 개 보여 줄 것이가에 대한 설정입니다

아래 샘플 화면은 CalendarDimensions 속성 값을 (6,6) 으로 설정한 모습입니다

, 이 속성은 달력이 표시되는 월의 열과 행 수를 설정하는 속성입니다

 

 

또한 MonthlyBoldedDates 속성을 통해 매달 특정 일(day) 을 굵게 표시되도록 할 수 있습니다

다음 코드는 매달 9일과 18일을 달력에서 굵게 표시하도록 합니다

this.monthCalendar1.MonthlyBoldedDates = new System.DateTime[] {
        new System.DateTime(2008, 1, 9, 0, 0, 0, 0),
        new System.DateTime(2008, 1, 18, 0, 0, 0, 0)};

 

이와 유사하게, AnnuallyBoldedDates  속성을 통해 매년 굵게 표시할 날짜를 지정할 수 있습니다

 

마지막으로 사용자가 선택하거나 이동할 수 있는 최소 날짜와 최대 날짜 값 지정을 위해

MaxDate MinDate 속성을 노출합니다

이 속성을 지정하면 설정 한 날짜 범위를 벗어나면 달력 UI 에서 선택되지 않으며

프로그래밍 상에서도 벗어난 날짜로 지정할 수 없게 된다

 

 

 

2. DateTimePicker 컨트롤

 

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

 

다음은 이 컨트롤의 상속 계층 구조 입니다

 

이 컨트롤은 MonthCalendar 처럼 '//' 현태의 날짜 정보 뿐만 아니라 시간 정보 까지도 핸들링 할 수 있는 컨트롤 입니다

 

이 컨트롤의 오른쪽에 드롭다운 화살표를 클릭 하면 아래 그림처럼 마치 MonthCalendar 과 같은 달력 UI 를 나타납니다

이 달력에서 특정 날짜를 클릭하면 날짜 선택이 됩니다

(, DateTimePicker 특정 일 하나만 표시 되기 때문에 MonthCalendar 처럼 여러 날짜를 지정할 수는 없습니다)

 

이 컨트롤에서 선택된 날짜 정보를 얻기 위해서는 Value 속성이 사용하면 됩니다

Value 속성은 현재 컨트롤에 설정된 날짜 정보를 DateTime 로 반환 해 줍니다

 

DateTimePicker ShowUpDown 속성을 true 로 설정하면 아래 그림처럼 드롭다운형 화살표 대신

Up/Down 화살표 버턴이 표시되며 그 버턴으로 선택된 곳의 값을 하나씩 증가/감소 시킬 수 있습니다

 

이건 마치 아래의 윈도우의 '날짜 및 시간' 에 나오는 시간표시 부와 유사합니다

 

만일 위 그림처럼 날짜를 제외한 시간만 표시하고 싶을 경우에는 Format (enum) 속성을 Time 로 설정하면 됩니다

그러면 아래 그림처럼 표시됩니다

 

물론 날짜와 시간을 동시에 표시할 수도 있습니다

아래에는 날짜 및 시간, 초를 모두 포함한 형태로 설정한 예시 입니다

 

이렇게 출력하도록 하려면 Format 속성을 Custom 으로 두고 CustomFormat 값을 다음과 같이 설정하면 됩니다

'yyyy M d dddd tt h m s'

 

yyyy 와 같은 날짜 형식 문자열을 이용해서 개발자가 임의로 표시부를 조절할 수가 있게 되는 것입니다

아래는 형식 문자열과 설명표 입니다

 

 

형식 문자열

설명

d

한 자리 또는 두 자리 날짜입니다.

dd

두 자리 날짜입니다. 한 자리로 된 날짜 값 앞에는 0이 옵니다.

ddd

세 문자로 된 요일 약어입니다.

dddd

요일의 전체 이름입니다.

h

12시간 형식의 한 자리 또는 두 자리 시간입니다.

hh

12시간 형식의 두 자리 시간입니다. 한 자리로 된 값 앞에는 0이 옵니다.

H

24시간 형식의 한 자리 또는 두 자리 시간입니다.

HH

24시간 형식의 두 자리 시간입니다. 한 자리로 된 값 앞에는 0이 옵니다.

m

한 자리 또는 두 자리 분입니다.

mm

두 자리 분입니다. 한 자리로 된 값 앞에는 0이 옵니다.

M

달을 나타내는 한 자리 또는 두 자리 숫자입니다.

MM

달을 나타내는 두 자리 숫자입니다. 한 자리로 된 값 앞에는 0이 옵니다.

MMM

세 문자로 된 달의 약어입니다.

MMMM

달의 전체 이름입니다.

s

한 자리 또는 두 자리 초입니다.

ss

두 자리 초입니다. 한 자리로 된 값 앞에는 0이 옵니다.

t

한 문자로 된 A.M./P.M. 약어이며, A.M. "A"로 표시됩니다.

tt

두 문자로 된 A.M./P.M. 약어이며, A.M. "AM"으로 표시됩니다.

y

한 자리 연도이며, 2001 "1"로 표시됩니다.

yy

연도의 마지막 두 자리이며, 2001 "01"로 표시됩니다.

yyyy

완전한 형태의 연도이며, 2001 "2001"로 표시됩니다.

 

이상으로 닷넷 윈폼에서 제공해 주는 날짜 관련 컨트롤 두 가지에 대해 알아 보았습니다

이 두 컨트롤의 가장 큰 차이점표시된는 컨트롤의 모양입니다

MonthCalendar 달력 모양으로 DateTimePicker 드롭다운 목록처럼 표시 됩니다

또한 아래와 같은 대표적인 두 가지 차이점이 있다 하겠습니다 

 

1. MonthCalendar : //일 정보만 표시 , DateTimePicker : //일 에 시간() 정보도 표시 가능

2. MonthCalendar : 여러 날짜를 한번에 지정할 수 있음(다중 선택 가능) , DateTimePicker : 한 날짜만 지정 가능

 

 

∵Commented by 초보 at 2009-07-09 오전 11:09:01  
DateTimePicker의 calendar에서도 특정날짜를 Bold체로 또는 다른 배경색으로 표시할 수 있나요?
∵Commented by 박종명 at 2009-07-10 오전 11:11:45  
음.. 글쎄요.. API를 봐도 해당 기능을 제공해 주지는 않는것 같네요
커스텀 컨트롤로 입맛에 맞도록 구성하는 것도 하나의 방법인것 같습니다
이름
비밀번호
홈페이지
TM <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요