2009-09-29 5 views
5

Windows Forms의 DateTimePicker 컨트롤과 관련된 매우 구체적인 버그가 발생했습니다. 컨트롤에는 사용자 정의 형식 (MM-YYYY -> 01/2010) - 신용 카드의 월/년이 있습니다. 오늘은 9 월 29 일입니다. 사용자가 컨트롤을 선택하고 키보드를 사용하여 월을 2 월으로 설정하면 컨트롤에서 ArgumentOutOfRangeException이 발생합니다. 2009 년 2 월 29 일과 같은 날짜는 없습니다. 30 일만에 한 달로 이동하여 31 일째되는 날에도 발생합니다.Windows Forms datetimepicker ArgumentOutOfRangeException을 어떻게 처리 할 수 ​​있습니까?

일을 '01'로 설정하면 쉽게 처리 할 수 ​​있지만 사용자가 캘린더를 클릭하여 수동으로 30 일을 선택한 다음 키보드를 사용하여 2 월을 선택할 수 있습니다.

GUI에서 입력이 일어나고 실제로 코드에서 발생하지 않을 때 어떻게이 예외를 포착 할 수 있습니까? 우리는 TextChanged 이벤트에서 그것을 잡으려고 시도했지만, 이미 너무 늦었습니다. 예외가 이미 발생했습니다.

이 사건을 처리 할 수있는 방법이 있습니까? 컨트롤이 해당 달의 가장 높은 값으로 날짜를 자동으로 변경하면 좋을 것입니다. 적어도 이벤트를 통해 예외를 통과 한 경우.

(KeyPressed 이벤트를 트랩하고 매번 01로 설정할 수 있지만 '해킹'이라고 느낄 수 있음을 알고 있습니다.)

답변

5

월과 연도 만 원할 경우, 처음에는 DatePicker를 사용하지 말아야 할 것 같습니다 ... 왜 사용자가 달의 날짜를 포함하는 컨트롤을 제공해야합니까? 그것을 사용하고 있지 않습니까?

두 개의 드롭 다운을 사용 하시길 제안합니다 (한 해에 한 번, 한 달에 한 번). 이는 거의 모든 온라인 지불 페이지의 사용자에게 익숙 할 것이며 문제를 피할 것입니다.

편집 : 좋아요, 예외 처리의 특정 질문에 대답하려면 Application.ThreadException 이벤트를 사용할 수 있지만 할 수 있으면 그렇게하지 않으려 고합니다.

+0

는 하루가 사용자에게 표시 될 때 발생하는 경우 난 그냥 테스트, 그리고 그것을하지 않습니다. 당신 말이 맞습니다. 잘못된 컨트롤이 사용 중입니다. 그러나 질문을 던지는 목적은 유사한 방식으로 발생한 예외를 처리 할 수 ​​있는지 파악하는 것이 었습니다. 컨트롤의 UI 상호 작용에서 예외가 생성되는 경우 –

1

컨트롤이 달력 드롭 다운이 아닌 회 전자가되도록 DateTimePicker의 ShowUpDown 속성을 true로 설정할 수 있습니까?

+0

이 여전히 사용자에게 표시하기 전에 1로 하루를 설정해야합니다 의미합니다. –

0

당신은 날없이 월/년을 입력 할 수있는 방법이 없습니다. 명시 적으로 요일을 지정하지 않으면 현재 요일이 사용됩니다. DateTimePicker에는 모든 데이터가 필요합니다. 마스크 뒤에 숨기면 중요하지 않습니다.

을 DateTimePicker을 할 수있는 유일한 방법은이, 일반적인 .NET 응답DateTimePicker에서 유래와 일없이 입력을 처리하는 사용자 정의 방법이 자신의 클래스를 작성하는 것입니다. 내가 00/0000 '(신용 카드 형식)로 설정 마스크 한 후 입력 유효성 검사와 MaskedTextBox을 제안 : 내가 할 수있는 경우 어쨌든, 당신은 ... 날을 설정하지 않고 멀리

을받지 않습니다. 물론

관련 문제